4 Stimmen

Können Lambdas ohne Linq verwendet werden?

Ich würde lieber kein Linq verwenden, wenn es nicht unbedingt notwendig ist (ich entferne Verweise darauf, wenn ich ein neues Projekt starte). Lambdas sehen jedoch nützlich aus. Ich werde jedoch nicht in die Gewohnheit verfallen, Lambdas zu verwenden, wenn Linq trotzdem mitmachen muss.

Vielen Dank im Voraus

23voto

McKay Punkte 12080

Lambdas können immer dann verwendet werden, wenn Sie möchten. Sie sind ein neues Sprachmerkmal. Linq verwendet sie, aber Sie müssen Linq nicht verwenden.

Action blah = () => { System.Console.WriteLine("Hallo Welt!"); }
blah(); // wird Hallo Welt! in die Konsole schreiben

16voto

Jon Skeet Punkte 1325502

Lambda-Ausdrücke sind völlig unabhängig von LINQ. Tatsächlich können Sie sie verwenden, wenn Sie ein .NET 2.0-Projekt von VS2008 oder VS2010 aus anvisieren. Ebenso können Sie bei Verwendung von .NET 3.5 Ausdrucksbäume verwenden, ohne LINQ zu verwenden - obwohl das in meiner Erfahrung weniger üblich ist.

Ich würde Sie jedoch dringend bitten, LINQ nicht zu meiden - es ist ein enorm leistungsstarkes Werkzeug. Ich persönlich bin leicht skeptisch gegenüber LINQ-Providern, die Übersetzungen über Queryable durchführen müssen - sie sind schwerer vorhersehbar - aber LINQ to Objects ist pure Gold. Was gefällt Ihnen nicht daran? Beachten Sie, dass Sie keine Abfrageausdrücke verwenden müssen, um LINQ zu verwenden - Sie können Abfragen in "Punkt-Notation" mit Lambda-Ausdrücken schreiben:

var abfrage = people.Where(p => p.Age >= 18)
                  .Select(p => p.Name);

... also, wenn Sie von Abfrageausdrücken abgeschreckt wurden, brauchen Sie sich keine Sorgen zu machen.

BEARBEITEN: Nur um einen Kommentar zur Frage selbst zu kontern - Sie können LINQ to Objects mit .NET 2.0 verwenden, über das LINQBridge Projekt.

4voto

Ben McCormack Punkte 30876

Es ist wichtig zu verstehen, wo Lambda-Ausdrücke herkommen und warum sie verwendet werden. Es ist wahr, dass die meisten Leute von Lambdas durch LINQ hören, aber LINQ implementiert einfach ein Feature, das in Version 3.0 der C#-Sprache als Nachfolger (denke ich) anonymer Methoden eingeführt wurde.

Lambdas werden tatsächlich mit delegates verwendet und wenn du ein Lambda verwendest, weist du tatsächlich einer Methode ein delegate zu. Du kannst jedoch das delegate-Schlüsselwort vermeiden, weil der Compiler erkennen kann, dass du ein delegate verwendest, einfach weil du einen Lambda-Ausdruck verwendest.

Also sind folgende Dinge dasselbe:

MyDel del = delegate (int x) {return x + 1;} ; // Verwendung einer anonymen Methode
MyDel le1 = x => x + 1;                        // Verwendung eines Lambda-Ausdrucks

Denke daran, dass ein Delegate seine Methoden nicht ausführt, bis es aufgerufen wird. Wenn du also x => x + 1 in deinem Lambda-Ausdruck siehst, wird dies tatsächlich erst ausgeführt, wenn du le1(someInt) aufrufst. Das hast du vielleicht in LINQ gesehen, wo die Abfrage erst ausgeführt wird, wenn das Delegate aufgerufen wird.

Kurz gesagt (und ich bin nicht für meine Kürze bekannt), ermöglicht ein Lambda, einen Methodenaufruf in Kurzform auszudrücken, ohne ihn im Körper deiner Klasse deklarieren zu müssen.

Meine Quelle für diese Antwort stammt von Daniel Solis' Illustriertes C# 2008, S.375-377.

3voto

Maximilian Mayerl Punkte 10839

Nein, Sie können Lambdas genauso wie anonyme Methoden verwenden, es ist kein LINQ erforderlich.

2voto

Greg D Punkte 41958

Lambdas können absolut ohne linq verwendet werden, ich mache das die ganze Zeit. Hier ist ein Codebeispiel, das ich an anderer Stelle gepostet habe und das ein Lambda ohne linq verwendet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X