A Func<int, string>
ест целые и возвращает строки. Итак, что ест целые и возвращает строки? Как насчет этого ...
public string IntAsString( int i )
{
return i.ToString();
}
Там я только что создал функцию, которая ест целые числа и возвращает строки. Как бы я использовал это?
var lst = new List<int>() { 1, 2, 3, 4, 5 };
string str = String.Empty;
foreach( int i in lst )
{
str += IntAsString(i);
}
// str will be "12345"
Не очень сексуально, я знаю, но это простая идея, на которой основано множество трюков. Теперь давайте использовать Func вместо этого.
Func<int, string> fnc = IntAsString;
foreach (int i in lst)
{
str += fnc(i);
}
// str will be "1234512345" assuming we have same str as before
Вместо того чтобы вызывать IntAsString для каждого члена, я создал ссылку на него с именем fnc (эти ссылки на методы называются делегаты ) и использовал ее вместо этого. (Помните, что fnc ест целые числа и возвращает строки).
Этот пример не очень сексуален, но тонна умных вещей, которые вы увидите, основана на простой идее функций, делегатов и методов расширения .
Один из лучших праймеров по этому материалу, который я видел, это здесь . У него гораздо больше реальных примеров. :)