Я всегда думал, что анонимные функции такие же могущественные, как и именованные функции, пока я не захочу превратить частную именованную функцию в анонимную функцию, потому что только один метод должен вызвать эту функцию. Тривиальный пример:Анонимные функции как могущественные, такие как не анонимные функции
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];
Это заставляет меня думать, что анонимные методы не столь могучую, как названные методы - по крайней мере, с точки зрения общего пользования - или я Я чего-то не хватает?
Конечно, для вашего Например, LINQ уже определяет '.First()' для 'IEnumer способный ' –