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);
}

Weitere Informationen