Gewusst wie: Verwenden von implizit typisierten lokalen Variablen und Arrays in einem Abfrageausdruck (C#-Programmierhandbuch)
Sie können immer implizit typisierte lokale Variablen verwenden, wenn der Compiler den Typ einer lokalen Variablen bestimmen soll. Sie müssen implizit typisierte lokale Variablen verwenden, um anonyme Typen zu speichern, die häufig in Abfrageausdrücken verwendet werden. Die folgenden Beispiele veranschaulichen die optionale und die erforderliche Verwendung von implizit typisierten lokalen Variablen in Abfragen.
Implizit typisierte lokale Variablen werden mit dem var-Kontextschlüsselwort deklariert. Weitere Informationen finden Sie unter Implizit typisierte lokale Variablen (C#-Programmierhandbuch) und Implizit typisierte Arrays (C#-Programmierhandbuch).
Beispiel
Das folgende Beispiel zeigt ein typisches Szenario, in dem das var-Schlüsselwort erforderlich ist: Ein Abfrageausdruck, der eine Sequenz anonymer Typen erzeugt. In diesem Szenario müssen die Abfragevariable und die Iterationsvariable in der foreach-Anweisung mithilfe von var implizit typisiert werden, da Sie keinen Zugriff auf einen Typnamen für den anonymen Typ haben. Weitere Informationen zu anonymen Typen finden Sie unter Anonyme Typen (C#-Programmierhandbuch).
private static void QueryNames(char firstLetter)
{
// Create the query. Use of var is required because
// the query produces a sequence of anonymous types:
// System.Collections.Generic.IEnumerable<????>.
var studentQuery =
from student in students
where student.FirstName[0] == firstLetter
select new { student.FirstName, student.LastName };
// Execute the query and display the results.
foreach (var anonType in studentQuery)
{
Console.WriteLine("First = {0}, Last = {1}", anonType.FirstName, anonType.LastName);
}
}
Im folgenden Beispiel wird das var-Schlüsselwort in einer ähnlichen Situation verwendet, in der jedoch die Verwendung von var optional ist. Da student.LastName eine Zeichenfolge ist, gibt die Ausführung der Abfrage eine Sequenz von Zeichenfolgen zurück. Daher kann der Typ von queryID als System.Collections.Generic.IEnumerable<string> statt als var deklariert werden. Das Schlüsselwort var wird aus praktischen Gründen verwendet. Im Beispiel wird die Iterationsvariable in der foreach-Anweisung explizit als string typisiert, sie kann jedoch stattdessen auch mit var deklariert werden. Da der Typ der Iterationsvariablen kein anonymer Typ ist, ist die Verwendung von var optional und nicht erforderlich. Denken Sie daran, dass var kein eigener Typ ist, sondern eine Anweisung an den Compiler, den Typ abzuleiten und zuzuweisen.
// Variable queryID could be declared by using
// System.Collections.Generic.IEnumerable<string>
// instead of var.
var queryID =
from student in students
where student.ID > 111
select student.LastName;
// Variable str could be declared by using var instead of string.
foreach (string str in queryID)
{
Console.WriteLine("Last name: {0}", str);
}
Siehe auch
Referenz
Erweiterungsmethoden (C#-Programmierhandbuch)
Konzepte
LINQ-Abfrageausdrücke (C#-Programmierhandbuch)