隐式定义的泛型类型,这可能吗?

时间:2016-02-13 00:09:47

标签: c# generics type-parameter

我目前想写一个通用的扩展方法。如果参数中的每个泛型类型都可用,我不需要定义泛型类型:

//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>());
}

1 个答案:

答案 0 :(得分:1)

如果编译器无法推断所有泛型类型,则必须全部传递它们。不支持部分推理。