LINQ-Äquivalent von ListT.Find ()?

8

Ich betrachte einen Code, der ein IEnumerable<T> akzeptiert und in den Code konvertiert a List<T> , damit es List<T>.Find(predicate) :

%Vor%

Gibt es eine Möglichkeit, dies mit den LINQ-Erweiterungsmethoden neu zu schreiben hat den gleichen Effekt, aber ohne einen zusätzlichen List<T> als Zwischenschritt zu erstellen?

Die Erweiterungsmethode FirstOrDefault(source, predicate) sieht wie ein guter Kandidat aus, versucht aber herauszufinden Wenn es genau ist entspricht Find meinem Kopf weh zu tun.

    
Joe White 29.06.2011, 23:28
quelle

3 Antworten

10

Das LINQ-Equivent wäre FirstOrDefault :

%Vor%     
Reed Copsey 29.06.2011, 23:30
quelle
13

Hier nur zur Referenz: Hier sehen Sie eine Tabelle mit einigen alten .NET 2-Style List<> -Instanzmethoden und ihren entsprechenden Erweiterungsmethoden in Linq:

%Vor%

Natürlich sind einige von ihnen nicht völlig gleichwertig. Insbesondere verwenden die Where und Select von Linq die verzögerte Ausführung, während FindAll und ConvertAll von List<> sofort ausgeführt werden und einen Verweis auf eine neue List<> -Instanz zurückgeben.

FindLast ist oft schneller als LastOrDefault , weil FindLast tatsächlich ab dem Ende von List<> sucht. Auf der anderen Seite läuft LastOrDefault(predicate) immer durch die gesamte Sequenz (beginnend mit dem ersten Element) und gibt dann nur die "letzte" Übereinstimmung zurück.

    
Jeppe Stig Nielsen 29.01.2014 16:11
quelle
1

Oder Sie können folgendermaßen vorgehen:

%Vor%     
Paul 29.06.2011 23:35
quelle

Tags und Links