let 子句(C# 参考)let clause (C# Reference)

在查询表达式中,存储子表达式的结果有时很有帮助,可在后续子句中使用。In a query expression, it is sometimes useful to store the result of a sub-expression in order to use it in subsequent clauses. 可以通过 let 关键字执行此操作,该关键字创建一个新的范围变量并通过提供的表达式结果初始化该变量。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. 使用值进行初始化后,范围变量不能用于存储另一个值。Once initialized with a value, the range variable cannot be used to store another value. 但是,如果范围变量持有可查询类型,则可以查询该变量。However, if the range variable holds a queryable type, it can be queried.

示例Example

以两种方式使用以下示例 letIn the following example let is used in two ways:

  1. 创建一个可以查询其自身的可枚举类型。To create an enumerable type that can itself be queried.

  2. 使查询仅调用一次范围变量 word 上的 ToLowerTo enable the query to call ToLower only one time on the range variable word. 如果不使用 let,则不得不调用 where 子句中的每个谓词的 ToLowerWithout 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.");
        Console.ReadKey();
    }
}
/* 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
*/

请参阅See also