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