Gewusst wie: Verwenden von implizit typisierten lokalen Variablen und Arrays in einem Abfrageausdruck (C#-Programmierhandbuch)How to: Use Implicitly Typed Local Variables and Arrays in a Query Expression (C# Programming Guide)

Sie können implizit typisierte lokale Variablen immer dann verwenden, wenn Sie möchten, dass der Compiler den Typ einer lokalen Variablen bestimmt.You can use implicitly typed local variables whenever you want the compiler to determine the type of a local variable. Sie müssen implizit typisierte lokale Variablen verwenden, um anonyme Typen zu speichern, die häufig in Abfrageausdrücken verwendet werden.You must use implicitly typed local variables to store anonymous types, which are often used in query expressions. In den folgenden Beispielen werden sowohl optionale als auch erforderliche Einsatzmöglichkeiten von implizit typisierte lokale Variablen in einer Abfrage veranschaulicht.The following examples illustrate both optional and required uses of implicitly typed local variables in queries.

Implizit typisierte lokale Variablen werden mit dem kontextuellen Schlüsselwort var deklariert.Implicitly typed local variables are declared by using the var contextual keyword. Weitere Informationen zu finden Sie unter Implizit typisierte lokale Variablen und Implizit typisierte Arrays.For more information, see Implicitly Typed Local Variables and Implicitly Typed Arrays.

BeispielExample

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.The following example shows a common scenario in which the var keyword is required: a query expression that produces a sequence of anonymous types. 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.In this scenario, both the query variable and the iteration variable in the foreach statement must be implicitly typed by using var because you do not have access to a type name for the anonymous type. Weitere Informationen zu anonymen Typen finden Sie unter Anonyme Typen.For more information about anonymous types, see Anonymous Types.

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

BeispielExample

In folgendem Beispiel wird das Schlüsselwort var in einer ähnlichen Situation verwendet, wobei der Gebrauch von var jedoch optional ist.The following example uses the var keyword in a situation that is similar, but in which the use of var is optional. Da student.LastName eine Zeichenfolge ist, gibt die Ausführung der Abfrage eine Sequenz von Zeichenfolgen zurück.Because student.LastName is a string, execution of the query returns a sequence of strings. Deshalb kann der Typ von queryID als System.Collections.Generic.IEnumerable<string> statt als var deklariert werden.Therefore, the type of queryID could be declared as System.Collections.Generic.IEnumerable<string> instead of var. Das Schlüsselwort var wird aus praktischen Gründen verwendet.Keyword var is used for convenience. In dem Beispiel wird die Iterationsvariable in der foreach-Anweisung explizit als Zeichenfolge typisiert. Sie könnte aber auch alternativ mit var deklariert werden.In the example, the iteration variable in the foreach statement is explicitly typed as a string, but it could instead be declared by using var. Da der Typ der Iterationsvariablen kein anonymer Typ ist, ist das Verwenden von var optional aber nicht verpflichtend.Because the type of the iteration variable is not an anonymous type, the use of var is an option, not a requirement. Denken Sie daran, das var selbst kein Typ ist, sondern eine Anweisung an den Compiler, um den Typen abzuleiten und zuzuweisen.Remember, var itself is not a type, but an instruction to the compiler to infer and assign the type.

// 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 auchSee Also

C#-ProgrammierhandbuchC# Programming Guide
ErweiterungsmethodenExtension Methods
LINQ (Language Integrated Query)LINQ (Language-Integrated Query)
varvar
LINQ-AbfrageausdrückeLINQ Query Expressions