Sdílet prostřednictvím


Implicitně typované lokální proměnné (Průvodce programováním v C#)

Místní proměnné může dostat inferred "typ" var namísto explicitního typu.var Klíčové slovo pokyn odvození typu proměnné z výrazu na pravé straně příkazu Inicializace kompilátoru.Inferred typ pravděpodobně předdefinovaný typ, anonymní typ, uživatelem definovaný typ nebo typ definován v.NET Framework, knihovna tříd.Další informace o inicializaci pole s var, viz Implicitně typovaná pole (Průvodce programováním v C#).

Následující příklady znázorňují různé způsoby, v nichž místní proměnné deklarovat s var:

// i is compiled as an int 
var i = 5;

// s is compiled as a string 
var s = "Hello";

// a is compiled as int[] 
var a = new[] { 0, 1, 2 };

// expr is compiled as IEnumerable<Customer> 
// or perhaps IQueryable<Customer> 
var expr =
    from c in customers
    where c.City == "London" 
    select c;

// anon is compiled as an anonymous type 
var anon = new { Name = "Terry", Age = 34 };

// list is compiled as List<int>                              
var list = new List<int>();

Je důležité vědět, že var klíčové slovo neznamená "variantou" a neznamená, že proměnná je volně zadali nebo pozdní vazbou.Pouze znamená, že kompilátor určí a přiřadí nejvhodnější typ.

var v následujících souvislostech lze použít klíčové slovo:

  • Na místní proměnné (proměnné deklarované v oboru metodu) jak je uvedeno v předchozím příkladu.

  • V pro příkaz inicializace.

    for(var x = 1; x < 10; x++)
    
  • V foreach příkaz inicializace.

    foreach(var item in list){...}
    
  • V pomocí prohlášení.

    using (var file = new StreamReader("C:\\myfile.txt")) {...}
    

Další informace naleznete v tématu Postupy: Použití implicitně typovaných lokálních proměnných a polí ve výrazu dotazu (Průvodce programováním v C#).

var a anonymní typy

V mnoha případech použití var je nepovinný a je právě syntaktické pohodlí.Však při inicializaci s anonymní typ proměnné musíte deklarovat proměnnou jako var Pokud potřebujete získat přístup k vlastnosti objektu později.Toto je běžný scénář v LINQ dotazu výrazy.Další informace naleznete v tématu Anonymní typy (Průvodce programováním v C#).

Anonymní typ z hlediska zdrojový kód nemá žádný název.Proto pokud byla inicializována proměnná dotazu s var, a potom je použít pouze tak vlastnosti objektů vrácených posloupnosti var jako typ iterační proměnná v foreach prohlášení.

class ImplicitlyTypedLocals2
{
    static void Main()
    {
        string[] words = { "aPPLE", "BlUeBeRrY", "cHeRry" };

        // If a query produces a sequence of anonymous types,  
        // then use var in the foreach statement to access the properties. 
        var upperLowerWords =
             from w in words
             select new { Upper = w.ToUpper(), Lower = w.ToLower() };

        // Execute the query 
        foreach (var ul in upperLowerWords)
        {
            Console.WriteLine("Uppercase: {0}, Lowercase: {1}", ul.Upper, ul.Lower);
        }
    }
}
/* Outputs:
    Uppercase: APPLE, Lowercase: apple
    Uppercase: BLUEBERRY, Lowercase: blueberry
    Uppercase: CHERRY, Lowercase: cherry        
 */

Poznámky

Implicitně zadali deklarace proměnných platí následující omezení:

  • varmůžete použít, pouze pokud je místní proměnné deklarované a inicializován v téže prohlášení; Nelze inicializovat proměnné, null, nebo metoda skupiny nebo anonymní funkce.

  • varnelze použít u polí v rozsahu třídy.

  • Proměnné deklarované pomocí var nelze použít ve výrazu inicializace.Jinými slovy, tento výraz je právní: int i = (i = 20); , ale tento výraz vznikne chyba kompilace:var i = (i = 20);

  • Nelze inicializovat více proměnných implicitně zadali stejné výkazu.

  • Typ s názvem var je v oboru, pak bude var klíčové slovo vyřeší tento název typu a bude zpracován jako součást implicitně zadaný místní proměnné prohlášení.

Zjistíte, že var může být také užitečné s výrazy dotazu, ve kterých je obtížné stanovit přesný vyrobeno typ proměnné dotazu.Tato situace může nastat s seskupování a řazení operací.

var Klíčové slovo může být užitečná také při konkrétní typ proměnné je únavné, zadejte na klávesnici, je zřejmé nebo nepřidá čitelnost kódu.Jeden příklad kde var je vhodné v tomto způsobem je s vnořené obecné typy, jako jsou skupiny operace.V následujícím dotazu je typu Proměnná dotazu IEnumerable<IGrouping<string, Student>>.Jako a kteří se musí udržovat váš kód rozumíte, není žádný problém s použitím implicitní psát pro pohodlí a stručnost.

// Same as previous example except we use the entire last name as a key. 
// Query variable is an IEnumerable<IGrouping<string, Student>> 
 var studentQuery3 =
     from student in students
     group student by student.Last;

Však použití var alespoň mohly mít ztížit pochopení pro ostatní vývojáře kódu.Z tohoto důvodu budou obecně používá dokumentaci C# var pouze pokud je vyžadováno.

Viz také

Úkoly

Postupy: Použití implicitně typovaných lokálních proměnných a polí ve výrazu dotazu (Průvodce programováním v C#)

Referenční dokumentace

Implicitně typovaná pole (Průvodce programováním v C#)

Anonymní typy (Průvodce programováním v C#)

Inicializátory objektu a kolekce (Průvodce programováním v C#)

var (Referenční dokumentace jazyka C#)

for (Referenční dokumentace jazyka C#)

foreach, in (Referenční dokumentace jazyka C#)

using – příkaz (Referenční dokumentace jazyka C#)

Koncepty

LINQ – výrazy dotazů (Průvodce programováním v C#)

Další zdroje

Referenční dokumentace jazyka C#

LINQ (Language-Integrated Query)