为继承类型编写扩展

Writing extensions for inherited types

我正在尝试为我正在使用的某些类型编写几个扩展。基本类型是 'InputField'。 'ListField' 继承自 'InputField'。我将展示我正在尝试做的事情:

public static void LoadInputField(this InputField input, CustomField field)
{
    SetValues(ref input, field);
}

public static void LoadInputField(this ListField input, CustomField field)
{
    SetValues(ref input, field);

    var optionItems = (from o in field.CustomFieldOptions
                         select new ListItem(o.OptionLabel, o.CustomFieldOptionId.ToString()));
    input.AddChoices(optionItems.ToList());
}

private static void SetValues(ref InputField input, CustomField field)
{
    input.CustomFieldId = field.CustomFieldId;
    input.ResponseTitle = field.ColumnName;
    input.Prompt = field.ColumnCaption;
    input.DisplayOrder = field.SortOrder;
    input.Required = !string.IsNullOrEmpty(field.ColumnRequiredMessage);

    input.ErrorClass = "text-danger";
    if (input.Required)
        input.RequiredMessage = field.ColumnRequiredMessage;
}

SetValues(ref input, field) 处的 ListField 类型错误的扩展;。消息说,“'ref' 参数类型与参数类型不匹配。”

也许这不是最好的方法,但我愿意接受其他选择。

您可以在调用方法之前将其转换为局部变量:

InputField inputField = (InputField)input;
SetValues(ref inputField, field);

除此之外,我不明白您为什么需要 ref,如果不是 ref,它无需转换即可工作。 C# requires that any ref parameters be of the exact type.

根据评论中的建议,我删除了 ref 并且代码有效。