Dela via


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

Se även