2013-02-23 44 views
1

LINQ Quiz问题和答案,Q4和Q5定义的λ外子查询迭代变量评价

随着colors阵列的数量为:

string[] colors = { "green", "brown", "blue", "red" }; 

和查询从回答到Q4:

var query = 
    from c in colors 
    where c.Length == colors.Max (c2 => c2.Length) 
    select c; 

我是否正确理解外部查询迭代表达式c2.Length将被评估16次?

即,用于在colors阵列的每个项目с,所述colors.Max (c2 => c2.Length)将被计算一次,即Max()计算将进行4次共i。并且对于每个Max()评估,c2.Length将被发现4次?

回答

4

是的,这是正确的。易于检查,以及如果你有LINQPad尝试:

string[] colors = { "green", "brown", "blue", "red" }; 

int count = 0; 

var query = 
    from c in colors 
    where c.Length == colors.Max (c2 => 
     { 
      count.Dump(); 
      count++; 
      return c2.Length; 
     } 
    ) 
    select c; 

query.Dump(); 
+0

谢谢。答案缺乏从LinqPad的“Language”下拉列表框中选择“C#Statement(s)”以便在其中运行的信息。我宁愿选择固定的控制台应用程序,而不愿学习其他工具 – Fulproof 2013-02-23 15:23:47