Практическое руководство. Использование неявно типизированных локальных переменных и массивов в выражении запроса (руководство по программированию на C#)

Неявно типизированные локальные переменные можно использовать в тех случаях, когда требуется, чтобы компилятор определял тип локальной переменной. Неявно типизированные локальные переменные необходимо использовать для хранения анонимных типов, которые часто используются в выражениях запроса. В следующих примерах демонстрируется обязательное и необязательное использование неявно типизированных локальных переменных в запросах.

Неявно типизированные локальные переменные объявляются с помощью контекстного ключевого слова var. Дополнительные сведения см. в разделах Неявно типизированные локальные переменные и Неявно типизированные массивы.

Примеры

В следующем примере показан общий сценарий, в котором использование ключевого слова var является обязательным: выражение запроса, создающее последовательность анонимных типов. В этом случае переменная запроса и переменная итерации в операторе foreach должны быть неявно типизированы с помощью ключевого слова var, поскольку доступ к имени анонимного типа отсутствует. Дополнительные сведения об анонимных типах см. в разделе Анонимные типы.

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

В следующем примере ключевое слово var используется в схожей ситуации, однако при этом ключевое слово var является необязательным. Поскольку student.LastName является строкой, при выполнении запроса возвращается последовательность строк. Таким образом, queryId можно объявить как System.Collections.Generic.IEnumerable<string> вместо var. Ключевое слово var используется для удобства. В этом примере переменная итерации в операторе foreach явно типизируется как строка, но вместо этого может быть объявлена с помощью ключевого слова var. Так как тип переменной итерации не является анонимным, использование ключевого слова var возможно, но не обязательно. Обратите внимание, что само по себе ключевое слово var является не типом, а инструкцией, предписывающей компилятору определение и присвоение типа.

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

См. также