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


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

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

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

Пример

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

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

См. также

Ссылки

Методы расширения (Руководство по программированию в C#)

var (справочник по C#)

Основные понятия

Руководство по программированию на C#

Выражения запросов LINQ (Руководство по программированию на C#)

Другие ресурсы

LINQ