我试图为我正在使用的某些类型编写一些扩展程序。基本类型是' 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'参数类型与参数类型不匹配。'
也许这不是最好的方法,但我可以选择。
答案 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并且代码可以运行。