Так Точно, єдиною відмінністю є той факт, що він повертає значення.
Спрощення (не використовуючи вирази):
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);
Я сподіваюся, що це допомагає.