Es gab also viele Kommentare darüber, dass eine ForEach-Erweiterungsmethode nicht geeignet ist, weil sie keinen Wert zurückgibt wie die LINQ-Erweiterungsmethoden. Dies ist zwar eine sachliche Aussage, aber sie ist nicht ganz zutreffend.
Die LINQ-Erweiterungsmethoden geben alle einen Wert zurück, sodass sie miteinander verkettet werden können:
collection.Where(i => i.Name = "hello").Select(i => i.FullName);
Nur weil LINQ mit Erweiterungsmethoden implementiert ist, bedeutet das jedoch nicht, dass Erweiterungsmethoden なければならない auf die gleiche Weise verwendet werden und einen Wert zurückgeben. Eine Erweiterungsmethode zu schreiben, um eine allgemeine Funktionalität darzustellen, die keinen Wert zurückgibt, ist eine durchaus zulässige Verwendung.
Das spezielle Argument für ForEach ist, dass aufgrund der Einschränkungen für Erweiterungsmethoden (nämlich, dass eine Erweiterungsmethode niemals eine geerbte Methode mit der Option gleiche Signatur ), kann es eine Situation geben, in der die benutzerdefinierte Erweiterungsmethode in allen Klassen verfügbar ist, die IEnumerable impelementieren <T
> außer Liste <T
>. Dies kann zu Verwirrung führen, wenn sich die Methoden unterschiedlich verhalten, je nachdem, ob die Erweiterungsmethode oder die Vererbungsmethode aufgerufen wird oder nicht.