Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 隐式定义的泛型类型,这可能吗?_C#_Generics_Type Parameter - Fatal编程技术网

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

C# 隐式定义的泛型类型,这可能吗?,c#,generics,type-parameter,C#,Generics,Type Parameter,我目前想写一个泛型扩展方法。如果参数中的每个泛型类型都可用,则无需定义泛型类型: //Extension Method public static GridBoundColumnBuilder<TModel> BoundEnum<TModel, TValue>(this GridColumnFactory<TModel> factory, Expression<Func<TModel, TValue>> ex

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

//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);
//扩展方法
公共静态GridBoundColumnBuilder
BoundEnum(此工厂,
表达);
//我可以这样称呼它,没有背景
columns.BoundEnum(c=>c.SomeProp);
如果要添加参数中未包含的泛型类型,则需要设置

//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);
//扩展方法
公共静态GridBoundColumnBuilder
BoundEnum(此工厂,
表达式(表达式)
//工作原理:
columns.BoundEnum(c=>c.SomeProp);
有没有办法让我只能写这个

columns.BoundEnum<TEnum>(c => c.SomeProp);
columns.BoundEnum(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>());
}
公共静态GridBoundColumnBuilder
BoundEnum(此工厂,
表达式(表达式)
其中TModel:class
其中TEnum:struct,i可比较
{
返回factory.ForeignKey(表达式,EnumHelper.ToSelectList());
}

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

简短版本:不支持。C#reference(你读过吗)对我来说似乎足够清楚;如果无法进行推断,则必须提供所有类型。也就是说,你问的问题并不清楚。在代码示例中,
TEnum
类型似乎没有实际使用。那么这有什么意义呢?你到底想做什么?你可以有:
columns.BoundExpression(c=>c.SomeProp).BoundEnum()
。我基本上想在扩展方法中获取枚举的类型。我没有展示完整的方法@PetSerAl
EnumHelper.ToSelectList
为我提供了一个带有EnumDescription属性的选择列表谢谢@PetSerAl,我喜欢这样:)