let-Klausel (C#-Referenz)let clause (C# Reference)

Bei einem Abfrageausdruck kann es manchmal nützlich sein, das Ergebnis eines Unterausdrucks zur Verwendung in nachfolgenden Klauseln zu speichern.In a query expression, it is sometimes useful to store the result of a sub-expression in order to use it in subsequent clauses. Sie können hierzu das Schlüsselwort let verwenden, das eine neue Bereichsvariable erstellt und sie mit dem von Ihnen bereitgestellten Ergebnis des Ausdrucks initialisiert.You can do this with the let keyword, which creates a new range variable and initializes it with the result of the expression you supply. Sobald die Bereichsvariable mit einem Wert initialisiert wurde, kann sie nicht mehr zum Speichern eines anderen Werts verwendet werden.Once initialized with a value, the range variable cannot be used to store another value. Enthält die Bereichsvariable jedoch einen abfragbaren Typ, kann sie abgefragt werden.However, if the range variable holds a queryable type, it can be queried.


Im folgenden Beispiel wird let auf zweierlei Weise verwendet:In the following example let is used in two ways:

  1. Um einen aufzählbaren Typ zu erstellen, der selbst abgefragt werden kann.To create an enumerable type that can itself be queried.

  2. Um es der Abfrage zu ermöglichen, ToLower nur ein Mal für die Bereichsvariable word aufzurufen.To enable the query to call ToLower only one time on the range variable word. Ohne let müssten Sie ToLower in jedem Prädikat der where-Klausel aufrufen.Without using let, you would have to call ToLower in each predicate in the where clause.

class LetSample1
    static void Main()
        string[] strings = 
            "A penny saved is a penny earned.",
            "The early bird catches the worm.",
            "The pen is mightier than the sword." 

        // Split the sentence into an array of words
        // and select those whose first letter is a vowel.
        var earlyBirdQuery =
            from sentence in strings
            let words = sentence.Split(' ')
            from word in words
            let w = word.ToLower()
            where w[0] == 'a' || w[0] == 'e'
                || w[0] == 'i' || w[0] == 'o'
                || w[0] == 'u'
            select word;

        // Execute the query.
        foreach (var v in earlyBirdQuery)
            Console.WriteLine("\"{0}\" starts with a vowel", v);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
/* Output:
    "A" starts with a vowel
    "is" starts with a vowel
    "a" starts with a vowel
    "earned." starts with a vowel
    "early" starts with a vowel
    "is" starts with a vowel

Siehe auchSee also