Wie man LINQ
verwendet, um unterschiedliche Eigenschaftswerte aus In-Memory-Listen abzurufen
Die Arbeit mit Sammlungen in C# ist eine gängige Aufgabe, insbesondere wenn es darum geht, verschiedene Eigenschaften von Objekten zu behandeln. Eine häufige Anforderung ist es, eindeutige Werte effizient aus einer Liste zu extrahieren. In diesem Beitrag werden wir eine häufige Frage behandeln, mit der viele Entwickler konfrontiert sind: Wie bekomme ich ein Array von unterschiedlichen Eigenschaftswerten aus einer Liste im Speicher unter Verwendung von LINQ
?
Das Problem verstehen
Stellen Sie sich vor, Sie haben eine Liste von Objekten einer Klasse namens Foo
. Jedes Foo
-Objekt hat eine Zeichenfolgen-Eigenschaft namens Bar
, und Sie möchten alle einzigartigen Werte von Bar
aus dieser Liste sammeln. Die Herausforderung besteht darin, dies ohne übermäßige Komplexität und auf eine effiziente und wartbare Weise zu erreichen.
Das Szenario
- Sie haben eine
List<Foo>
. - Jedes
Foo
-Objekt hat eine EigenschaftBar
vom Typstring
. - Sie möchten ein
string[]
erhalten, das nur die unterschiedlichen Werte aus denBar
-Eigenschaften allerFoo
-Instanzen enthält.
Die Lösung
Um die unterschiedlichen Werte von Bar
aus einer Liste von Foo
-Objekten effektiv zu extrahieren, können Sie die Leistungsfähigkeit von LINQ
nutzen. So geht’s:
Verwendung von LINQ zur Extraktion unterschiedlicher Werte
Hier ist ein einfacher und eleganter Weg, Ihr Ziel mit LINQ zu erreichen:
var bars = Foos.Select(f => f.Bar).Distinct().ToArray();
Aufschlüsselung des Codes
Foos.Select(f => f.Bar)
: Dieser Teil des Codes ist ein Lambda-Ausdruck, der jedesFoo
-Objekt in seineBar
-Eigenschaft projiziert..Distinct()
: Dieser Methodenaufruf filtert das Ergebnis und gibt nur einzigartige Werte zurück, wodurch Duplikate aus der Auswahl effektiv eliminiert werden..ToArray()
: Schließlich konvertiertToArray()
das Resultat vom Typ IEnumerable in ein Array von Zeichenfolgen.
Wichtige Überlegungen
- Aufgeschobene Ausführung: LINQ-Abfragen werden nicht ausgeführt, bis Sie ihre Ergebnisse explizit konsumieren. Durch die Verwendung von Methoden wie
ToArray()
oderCount()
lösen Sie die Auswertung der Abfrage aus. - Optimierungen: Es ist ratsam, Ihre Abfragen vollständig zu erstellen, bevor Sie die Auswertung mit
ToArray()
forcieren, da LINQ während des Ausführungsprozesses Optimierungen anwenden kann.
Fazit
Die Verwendung von LINQ vereinfacht nicht nur den Prozess der Extraktion unterschiedlicher Eigenschaftswerte, sondern sichert auch, dass Ihr Code sauber und wartbar bleibt. Durch die ordnungsgemäße Strukturierung Ihrer Abfragen können Sie die Fähigkeiten von LINQ effektiv nutzen, um die Leistung zu optimieren.
Das nächste Mal, wenn Sie aus einer Liste in C# unterschiedliche Werte extrahieren müssen, können Sie diesen einfachen Ansatz selbstbewusst anwenden!