我目前想写一个通用的扩展方法。如果参数中的每个泛型类型都可用,我不需要定义泛型类型:
//Extension Method
public static GridBoundColumnBuilder<TModel>
BoundEnum<TModel, TValue>(this GridColumnFactory<TModel> factory,
Expression<Func<TModel, TValue>> expression);
//I can call It this way, whitout setting <TModel, TValue>
columns.BoundEnum(c => c.SomeProp);
如果我想添加参数中未涵盖的泛型类型,我需要设置<TModel, TValue>
:
//Extension Method
public static GridBoundColumnBuilder<TModel>
BoundEnum<TModel, TValue, TEnum>(this GridColumnFactory<TModel> factory,
Expression<Func<TModel, TValue>> expression)
//How it works:
columns.BoundEnum<TModel, TValue, TEnum>(c => c.SomeProp);
有没有办法只能写这个?
columns.BoundEnum<TEnum>(c => c.SomeProp);
修改:这是完整的方法:
public static GridBoundColumnBuilder<TModel>
BoundEnum<TModel, TValue, TEnum>(this GridColumnFactory<TModel> factory,
Expression<Func<TModel, TValue>> expression)
where TModel : class
where TEnum : struct, IComparable
{
return factory.ForeignKey(expression, EnumHelper.ToSelectList<TEnum>());
}
答案 0 :(得分:1)
如果编译器无法推断所有泛型类型,则必须全部传递它们。不支持部分推理。