我一直認爲匿名函數和命名函數一樣強大,直到我想將一個私有命名函數變成一個匿名函數,因爲只有一個方法體需要調用這個函數。一個簡單的例子:匿名函數與非匿名函數一樣強大
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()'能夠' –