为继承类型编写扩展
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 并且代码有效。
我正在尝试为我正在使用的某些类型编写几个扩展。基本类型是 '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 并且代码有效。