我一直认为匿名函数和命名函数一样强大,直到我想将一个私有命名函数变成一个匿名函数,因为只有一个方法体需要调用这个函数。一个简单的例子:匿名函数与非匿名函数一样强大
public void Init(List<int> numbers, List<string> texts)
{
int n = GetFirst(numbers);
string t = GetFirst(texts);
}
private T GetFirst<T>(List<T> list)
{
return list[0];
}
期望是定义像
GenFunc<T, List<T>, T> getFirst = list => list[0];
和使用的东西,而不是实例方法GetFirst
说。使用Func
是不可能的,因为泛型参数具有不同的语义。因此,我所定义的委托(的Func
“碱基”)
delegate T GetFirstDelegate<T>(List<T> list);
但我只能与定义的通用参数例如实例化
GetFirstDelegate<string> getFirst = list => list[0];
,但不是因为我希望与占位符泛型参数:
GetFirstDelegate<T> getFirst = list => list[0];
这让我觉得,匿名方法并不像mightly的命名方法 - 至少在一般的使用方面 - 或很我错过了什么?
当然,对于您的例如,LINQ已经为IEnumer定义了一个'.First()'能够' –