为继承类型编写扩展

时间:2015-08-12 15:16:20

标签: c# extension-methods

我试图为我正在使用的某些类型编写一些扩展程序。基本类型是' 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'参数类型与参数类型不匹配。'

也许这不是最好的方法,但我可以选择。

2 个答案:

答案 0 :(得分:0)

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

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

除此之外,我不明白为什么你需要ref,如果它不是ref,它可以在不进行投射的情况下工作。 C# requires that any ref parameters be of the exact type

答案 1 :(得分:0)

根据评论中的建议,我删除了ref并且代码可以运行。