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