隐式定义的泛型类型,这可能吗?
Implicit defined generic types, is this possible?
我目前想写一个通用的扩展方法。如果参数中每个泛型都可用,我就不需要定义泛型了:
//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>());
}
如果编译器无法推断出所有泛型类型,那么您必须将它们全部传递。不支持部分推理。
我目前想写一个通用的扩展方法。如果参数中每个泛型都可用,我就不需要定义泛型了:
//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>());
}
如果编译器无法推断出所有泛型类型,那么您必须将它们全部传递。不支持部分推理。