Поделиться через


Использование неявно типизированных локальных переменных и массивов в выражении запроса (руководство по программированию на 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: {str}");
}

См. также