Да Точно, единственное различие заключается в том, что он возвращает значение.
Упрощение (без использования выражений):
List<T>.ForEach
Выполняет действие, не ожидает возврата.
Так что делегата Action<T>
будет достаточно .. скажем:
List<T>.ForEach(param => Console.WriteLine(param));
- это то же самое, что сказать:
List<T>.ForEach(delegate(T param) { Console.WriteLine(param); });
Разница в том, что тип параметра и удаление делегата определяются с помощью использования, и для простого встроенного метода скобки не требуются.
Где, как
List<T>.Where
Принимает функцию, ожидая результата.
Таким образом, можно ожидать Function<T, bool>
:
List<T>.Where(param => param.Value == SomeExpectedComparison);
, что совпадает с:
List<T>.Where(delegate(T param) { return param.Value == SomeExpectedComparison; });
Вы также можете объявить эти методы встроенными и присвоить их переменным IE:
Action myAction = () => Console.WriteLine("I'm doing something Nifty!");
myAction();
или
Function<object, string> myFunction = theObject => theObject.ToString();
string myString = myFunction(someObject);
Надеюсь, это поможет.