Použití implicitně zadaných místních proměnných a polí ve výrazu dotazu (Průvodce programováním v C#)

Implicitně zadané místní proměnné můžete použít vždy, když chcete, aby kompilátor určil typ místní proměnné. K ukládání anonymních typů, které se často používají ve výrazech dotazů, je nutné použít implicitně zadané místní proměnné. Následující příklady ilustrují volitelné i povinné použití implicitně zadaných místních proměnných v dotazech.

Implicitně zadané místní proměnné jsou deklarovány pomocí kontextového klíčového slova var . Další informace naleznete v tématu Implicitně typované místní proměnné a implicitně typovaná pole.

Příklady

Následující příklad ukazuje běžný scénář, ve kterém var je klíčové slovo povinné: výraz dotazu, který vytváří posloupnost anonymních typů. V tomto scénáři musí být proměnná dotazu i iterační proměnná v foreach příkazu implicitně zadány pomocí, var protože nemáte přístup k názvu typu pro anonymní typ. Další informace o anonymních typech naleznete v tématu Anonymní typy.

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

Následující příklad používá var klíčové slovo v situaci, která je podobná, ale v níž je použití var volitelné. Vzhledem k tomu student.LastName , že je řetězec, vrátí spuštění dotazu posloupnost řetězců. Proto lze typ deklarovat queryId jako System.Collections.Generic.IEnumerable<string> místo var. Klíčové slovo var se používá pro usnadnění. V příkladu je iterační proměnná v foreach příkazu explicitně zadána jako řetězec, ale místo toho by mohla být deklarována pomocí var. Vzhledem k tomu, že typ proměnné iterace není anonymním typem, je použití var možnosti, nikoli požadavku. Nezapomeňte, že var sám o sobě není typ, ale instrukce kompilátoru k odvození a přiřazení 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);
}

Viz také