不
-泛型类型,具有泛型方法:
public class XYZ
{
public static XYZ Action<T, TKey> (TKey key, T element)
{
return new XYZ<T>(element);
}
}
编辑:回答问题编辑。
不,你不能这样做:
abc.Accept(Ordering.By(u => u.Id));
问题是内在的表达:
Ordering.By(u => u.Id)
这是什么类型的
u
在这里?可以是任何有
Id
财产。注意,C编译器需要计算出这个表达式的类型
它看起来像
abc.Accept
. 即使
只有
为一个
Ordering<User>
,它将失败。
这里有三个选项:
-
Ordering<User>.By(u => u.Id)
-
在非泛型类中使用泛型方法,显式指定两个类型参数:
Ordering.By<User, string>(u => u.Id)
-
Ordering.By((User u) => u.Id)
显然,所有这些情况都要求您在某处显式指定类型。
小的
如果你已经有了一个
User
public static Ordering<T> By<T,TKey>(Expression<Func<T, TKey>> func, T example)
{
return By<T, TKey>(func);
}
...
Ordering.By(u => u.Id, dummyUser);