2009-04-17 4 views
10

Für mich ist LINQ nur eine lose und amorphe Wolke von Konzepten, normalerweise über Datenzugriff, aber auch in Kombination mit Lambda-Ausdrücken, Delegaten, anonymen Funktionen und Erweiterungsmethoden, es geht um String- und Sammlungsmanipulation, also will ich pinnen es runter.Ist List.ForEach technisch ein Teil von LINQ oder nicht?

Wenn ich den folgenden Code schreibe, kann ich sagen, dass ich LINQ verwende oder nicht?

List<string> words = new List<string>() { "one", "two", "three" }; 
words.ForEach(word => Console.WriteLine(word.ToUpper())); 

z.B. Die "ForEach" Methode wird weithin als eine "LINQ-Methode" bezeichnet, aber ihre Heimat ist in System.Collections.Generic.List und nicht System.Linq.

+0

Ordentlich Frage, stellt klar, ein paar Dinge, die ich fragen habe. +1. –

Antwort

12

Es ist nicht Teil von LINQ - es gab in .NET 2.0, lange vor LINQ. Es ist LINQ-ähnlich, aber ich würde nicht sagen, dass es ein Teil von LINQ ist.

Auf der anderen Seite, wenn Sie Ihre eigene IEnumerable<T> Erweiterungsmethode ForEach implementieren (wie in MoreLINQ), dass als Nicht-Standard-LINQ Operator ...

+0

Flüche, direkt vor mir. –

-2

Wenn Sie versuchen, LINQ als ein Fortsetzungsschlüsselwort zu rechtfertigen, wahrscheinlich nicht. Aber dieses Feature wurde mit dem Rest der Linq Funktionalität hinzugefügt, und ist in der gleichen Familie von Funktionalität, so sortof :)

+2

IList .Foreach wurde mit LINQ * nicht * hinzugefügt. Es existierte in .NET 2.0. – Samuel

3

ForEach ist, es ist einfach nicht LINQ angesehen werden könnte ist Eine Methode, die einen Delegaten akzeptiert. Seit .NET 2.0 dort gewesen.

0

In dem von Ihnen geposteten Beispiel verwenden Sie nicht LINQ. Die ForEach-Methode ist nur eine nette Möglichkeit, die Elemente in Ihrem aufzählbaren Datentyp zu durchlaufen, ohne die Schleife explizit zu schreiben.

1

Mit einem Delegaten macht es nicht LINQ.

Foreach ist keine "LINQ" -Methode, es ist kein Mitglied von Enumerable oder Queryable, und es gibt keine Verständnis-Syntax dafür.

Und vor allem ändert es die Quelle (Liste), die LINQ to Objects nicht ist.

Ich würde "Nein" sagen.

2

Linq bedeutet "Sprache integrierte Abfrage". Um wirklich zu sein Linq „verwenden“, benötigen Sie ein Konstrukt etwas wie folgt aus:

var result = from word in words 
       where word.Length < 5 
       select word; 

Das heißt, das System der IEnumerable + lazy evaluation + lamdba Ausdruck + Verschlüsse auf dem Linq hängt davon ab, ist signifikant genug, um von sich selbst um sein eigenes Schlagwort zu rechtfertigen. Zu sagen, dass man Lambda-Ausdrücke verwenden kann, schneidet es nicht wirklich ab, imo. Ein typisches Beispiel ist dieses Beispiel. Sie könnten Verwendung Linq, aber warum, wenn diese genauso schön ist und viel kürzer:

var result = words.Where(w => w.Length < 5); 
+0

Ich würde argumentieren, dass die Verwendung von LINQ nur die Verwendung der Namespaces bedeuten würde. Sie müssen die Abfragesyntax nicht verwenden, um ling zu verwenden.Du könntest genauso etwas wie 'var result = words.Where (x => x.Length <5);' –

Verwandte Themen