Gewusst wie: Verwenden von implizit typisierten lokalen Variablen und Arrays in einem Abfrageausdruck (C#-Programmierhandbuch)
Sie können implizit typisierte lokale Variablen immer dann verwenden, wenn Sie möchten, dass der Compiler den Typ einer lokalen Variablen bestimmt. Sie müssen implizit typisierte lokale Variablen verwenden, um anonyme Typen zu speichern, die häufig in Abfrageausdrücken verwendet werden. In den folgenden Beispielen werden sowohl optionale als auch erforderliche Einsatzmöglichkeiten von implizit typisierte lokale Variablen in einer Abfrage veranschaulicht.
Implizit typisierte lokale Variablen werden mit dem kontextuellen Schlüsselwort var deklariert. Weitere Informationen zu finden Sie unter Implizit typisierte lokale Variablen und Implizit typisierte Arrays.
Beispiele
Im folgenden Beispiel wird ein häufiges Szenario gezeigt, in dem das Schlüsselwort var
erforderlich ist: ein Abfrageausdruck, der eine Folge anonymer Typen erzeugt. In diesem Szenario müssen sowohl die Abfragevariable als auch die Iterationsvariable in der foreach
-Anweisung mit 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.
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);
}
}
In folgendem Beispiel wird das Schlüsselwort var
in einer ähnlichen Situation verwendet, wobei der Gebrauch von var
jedoch optional ist. Da student.LastName
eine Zeichenfolge ist, gibt die Ausführung der Abfrage eine Sequenz von Zeichenfolgen zurück. Deshalb 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. In dem Beispiel wird die Iterationsvariable in der foreach
-Anweisung explizit als Zeichenfolge typisiert. Sie könnte aber auch alternativ mit var
deklariert werden. Da der Typ der Iterationsvariablen kein anonymer Typ ist, ist das Verwenden von var
optional aber nicht verpflichtend. Denken Sie daran, das var
selbst kein Typ ist, sondern eine Anweisung an den Compiler, um den Typen 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);
}