LINQ und generische Typen (C#)
LINQ-Abfragen basieren auf generischen Typen, die in Version 2.0 von .NET Framework eingeführt wurden. Sie benötigen kein ausführliches Wissen über Generika, um Abfragen zu schreiben. Dennoch ist es gut, wenn Sie zwei grundlegende Konzepte verstehen:
Wenn Sie eine Instanz einer generischen Auflistungsklasse erstellen, wie zum Beispiel List<T>, ersetzen Sie das "T" durch den Typ von Objekten, die die Liste enthalten wird. Zum Beispiel wird eine Liste von Zeichenfolgen als List<string> und eine Liste von Customer-Objekten als List<Customer> ausgedrückt. Eine generische Liste weist eine starke Typisierung auf und bietet viele Vorteile gegenüber Auflistungen, die ihre Elemente als Object speichern. Wenn Sie versuchen, Customer zu List<string> hinzuzufügen, tritt zur Kompilierungszeit ein Fehler auf. Die Verwendung von generischen Auflistungen ist leicht, da Sie zur Laufzeit keine Typumwandlungen ausführen müssen.
IEnumerable<T> ist die Schnittstelle, die die Aufzählung von generischen Auflistungsklassen durch Verwenden der foreach-Anweisung ermöglicht. Generische Auflistungsklassen unterstützen IEnumerable<T>, ebenso wie nicht generische Auflistungsklassen, wie zum Beispiel ArrayList, IEnumerable unterstützen.
Weitere Informationen zu Generika finden Sie unter Generika (C#-Programmierhandbuch).
IEnumerable<T>-Variablen in LINQ-Abfragen
LINQ-Abfragevariablen werden als IEnumerable<T> typisiert oder als abgeleiteter Typ, wie zum Beispiel IQueryable<T>. Wenn Sie eine Abfragevariable mit der Typisierung IEnumerable<Customer> sehen, so bedeutet dies lediglich, dass die Abfrage bei ihrer Ausführung eine Sequenz von keinen oder mehreren Customer-Objekten erstellen wird.
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 (C#).
Behandeln generischer Typdeklarationen mithilfe des Compilers
Auf Wunsch können Sie die generische Syntax auch vermeiden, indem Sie das var-Schlüsselwort verwenden. Das var-Schlüsselwort weist den Compiler an, den Typ einer Abfragevariablen abzuleiten, indem er sich nach der in der from-Klausel angegebenen Datenquelle richtet. 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 var-Schlüsselwort bietet sich besonders an, wenn der Variablentyp offensichtlich ist oder wenn die ausdrückliche Angabe von geschachtelten, generischen Typen, z. B. solche, die bei Gruppenabfragen erstellt werden, nicht so wichtig ist. Allgemein möchten wir darauf hinweisen, dass Ihr Code durch Verwendung von var eventuell schlechter lesbar wird. Weitere Informationen finden Sie unter Implizit typisierte lokale Variablen (C#-Programmierhandbuch).
Siehe auch
Referenz
Generika (C#-Programmierhandbuch)