Så här använder du implicit inskrivna lokala variabler och matriser i ett frågeuttryck (C#-programmeringsguide)
Du kan använda implicit inskrivna lokala variabler när du vill att kompilatorn ska fastställa typen av en lokal variabel. Du måste använda implicit inskrivna lokala variabler för att lagra anonyma typer, som ofta används i frågeuttryck. Följande exempel illustrerar både valfri och nödvändig användning av implicit inskrivna lokala variabler i frågor.
Implicit inskrivna lokala variabler deklareras med hjälp av nyckelordet var contextual. Mer information finns i Implicit inskrivna lokala variabler och implicit typade matriser.
Exempel
I följande exempel visas ett vanligt scenario där nyckelordet var
krävs: ett frågeuttryck som skapar en sekvens med anonyma typer. I det här scenariot måste både frågevariabeln och iterationsvariabeln i -instruktionen foreach
skrivas implicit med hjälp var
av eftersom du inte har åtkomst till ett typnamn för den anonyma typen. Mer information om anonyma typer finns i Anonyma typer.
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);
}
}
I följande exempel används nyckelordet var
i en liknande situation, men där användningen av var
är valfri. Eftersom student.LastName
är en sträng returnerar körningen av frågan en sekvens med strängar. Därför kan typen av queryId
deklareras som System.Collections.Generic.IEnumerable<string>
i stället för var
. Nyckelord var
används för enkelhetens skull. I exemplet skrivs iterationsvariabeln i -instruktionen uttryckligen foreach
som en sträng, men den kan i stället deklareras med hjälp var
av . Eftersom typen av iterationsvariabel inte är en anonym typ är användningen av var
ett alternativ, inte ett krav. Kom ihåg att var
själva inte är en typ, utan en instruktion till kompilatorn att härleda och tilldela typen.
// 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);
}