Ja Genau, der einzige Unterschied ist die Tatsache, dass ein Wert zurückgegeben wird.
Vereinfachung (ohne Ausdrücke):
List<T>.ForEach
Führt eine Aktion aus, erwartet kein Rückgabeergebnis.
Ein Action<T>
Delegierter würde also ausreichen. Sagen Sie:
List<T>.ForEach(param => Console.WriteLine(param));
ist das gleiche wie zu sagen:
List<T>.ForEach(delegate(T param) { Console.WriteLine(param); });
Der Unterschied besteht darin, dass der Parametertyp und die Delegiertendekleration durch die Verwendung abgeleitet werden und die geschweiften Klammern bei einer einfachen Inline-Methode nicht erforderlich sind.
Wohingegen
List<T>.Where
Übernimmt eine Funktion und erwartet ein Ergebnis.
Also Function<T, bool>
wäre ein zu erwarten:
List<T>.Where(param => param.Value == SomeExpectedComparison);
Das ist das gleiche wie:
List<T>.Where(delegate(T param) { return param.Value == SomeExpectedComparison; });
Sie können diese Methoden auch inline deklarieren und sie den Variablen IE zuordnen:
Action myAction = () => Console.WriteLine("I'm doing something Nifty!");
myAction();
oder
Function<object, string> myFunction = theObject => theObject.ToString();
string myString = myFunction(someObject);
Ich hoffe das hilft.