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

Zobacz też