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#)
Koncepty
LINQ dotazu výrazy (Příručka programování C#)