Sdílet prostřednictvím


Implicitně zadali místní proměnné (C# programování Guide)

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ě zadaný matic (C# programování Guide).

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 Jak: použití implicitně zadali místní proměnné a polí ve výrazu dotazu (Příručka programování 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 (Příručka programování 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

Jak: použití implicitně zadali místní proměnné a polí ve výrazu dotazu (Příručka programování C#)

Referenční dokumentace

Implicitně zadaný matic (C# programování Guide)

Anonymní typy (Příručka programování C#)

Objekt a kolekce Inicializátory (Příručka programování C#)

var (C#-Reference)

(referenční C#)

foreach (C# odkazu)

pomocí příkazu (C#-Reference)

Koncepty

LINQ dotazu výrazy (Příručka programování C#)

Další zdroje

C#-Reference

LINQ (integrován jazyk dotazu)