LINQ und generische Typen (C#)

LINQ-Abfragen basieren auf generischen Typen, die mit Version 2.0 von .NET Framework eingeführt wurden. Sie benötigen kein ausführliches Wissen über Generika, um Abfragen schreiben zu können. Dennoch sollten Sie zwei grundlegende Konzepte verstehen:

  1. Wenn Sie eine Instanz einer generischen Auflistungsklasse wie etwa List<T> erstellen, ersetzen Sie das „T“ durch den Objekttyp, den die Liste enthalten wird. Eine Liste von Zeichenfolgen wird z.B. als List<string> und eine Liste von Customer-Objekten als List<Customer> ausgedrückt. Eine generische Liste ist stark typisiert und hat gegenüber Auflistungen, die ihre Elemente als Object speichern, viele Vorzüge. Wenn Sie versuchen einen Customer in eine List<string> einzufügen, erhalten Sie zur Laufzeit eine Fehlermeldung. Es ist sehr leicht, generische Auflistungen zu verwenden, da Sie keine Laufzeitumwandlung von Typen durchführen müssen.

  2. IEnumerable<T> ist die Schnittstelle, die es ermöglicht, dass generische Auflistungsklassen mithilfe der Anweisung foreach aufzählt. Generische Auflistungsklassen unterstützen IEnumerable<T> so wie nicht generische Auflistungsklassen – wie etwa ArrayListIEnumerable unterstützen.

Weitere Informationen zu Generika finden Sie unter Generika.

IEnumerable-Variablen in LINQ-Abfragen

LINQ-Abfragevariablen sind vom Typ IEnumerable<T>, oder sie sind abgeleitete Typen wie etwa IQueryable<T>. Wenn Sie eine Abfragevariable des Typs IEnumerable<Customer> sehen, bedeutet dies nur, dass die Abfrage bei der Ausführung eine Folge von null oder mehr Customer-Objekten produziert.

IEnumerable<Customer> customerQuery =
    from cust in customers
    where cust.City == "London"
    select cust;

foreach (Customer customer in customerQuery)
{
    Console.WriteLine(customer.LastName + ", " + customer.FirstName);
}

Weitere Informationen finden Sie unter Typbeziehungen in LINQ-Abfragevorgängen.

Verarbeiten von generischen Typdeklaration durch den Compiler

Falls Sie dies möchten, können Sie generische Syntax umgehen, indem Sie das Schlüsselwort var verwenden. Das Schlüsselwort var weist den Compiler an, den Typ der Abfragevariablen abzuleiten, indem er sich an der in der from-Klausel angegebenen Datenquelle orientiert. Das folgende Beispiel erstellt den gleichen kompilierten Code wie das vorherige Beispiel:

var customerQuery2 = 
    from cust in customers
    where cust.City == "London"
    select cust;

foreach(var customer in customerQuery2)
{
    Console.WriteLine(customer.LastName + ", " + customer.FirstName);
}

Das Schlüsselwort var ist nützlich, wenn der Typ der Variablen offensichtlich ist, oder wenn es nicht so wichtig ist, die geschachtelten generischen Typen explizit festzulegen, wie z.B. diejenigen, die in Gruppenabfragen erstellt werden. Allgemein wird darauf hingewiesen, dass das Verwenden von var das Lesen Ihres Codes durch andere erschwert. Weitere Informationen zu finden Sie unter Implizit typisierte lokale Variablen.

Siehe auch

Erste Schritte mit LINQ in C#
Generika