Jak używać niejawnie wpisanych zmiennych lokalnych i tablic w wyrażeniu zapytania (Przewodnik programowania w języku C#)
Można użyć niejawnie wpisanych zmiennych lokalnych zawsze, gdy kompilator ma określić typ zmiennej lokalnej. Należy użyć niejawnie wpisanych zmiennych lokalnych do przechowywania typów anonimowych, które są często używane w wyrażeniach zapytań. Poniższe przykłady ilustrują zarówno opcjonalne, jak i wymagane zastosowania niejawnie wpisanych zmiennych lokalnych w zapytaniach.
Niejawnie wpisane zmienne lokalne są deklarowane przy użyciu słowa kluczowego var contextual. Aby uzyskać więcej informacji, zobacz Niejawnie typizowane zmienne lokalne i niejawnie typizowane tablice.
Przykłady
W poniższym przykładzie przedstawiono typowy scenariusz, w którym var
wymagane jest słowo kluczowe: wyrażenie zapytania, które tworzy sekwencję typów anonimowych. W tym scenariuszu zarówno zmienna kwerendy, jak i zmienna iteracji w foreach
instrukcji muszą być niejawnie wpisywane przy użyciu, var
ponieważ nie masz dostępu do nazwy typu anonimowego. Aby uzyskać więcej informacji na temat typów anonimowych, zobacz Typy anonimowe.
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);
}
}
W poniższym przykładzie użyto słowa kluczowego var
w podobnej sytuacji, ale w której użycie var
elementu jest opcjonalne. Ponieważ student.LastName
jest to ciąg, wykonanie zapytania zwraca sekwencję ciągów. W związku z queryId
tym typ może być zadeklarowany jako System.Collections.Generic.IEnumerable<string>
zamiast var
. Słowo kluczowe var
jest używane dla wygody. W tym przykładzie zmienna iteracji w foreach
instrukcji jest jawnie wpisywana jako ciąg, ale zamiast tego można ją zadeklarować przy użyciu polecenia var
. Ponieważ typ zmiennej iteracji nie jest typem anonimowym, jest var
to opcja, a nie wymaganie. Pamiętaj, że var
sam typ nie jest typem, ale instrukcją kompilatora w celu wnioskowania i przypisywania typu.
// 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);
}