LINQ是否在幕后迭代?

时间:2013-03-20 02:50:18

标签: .net linq

这不是世界上最重要的问题,但作为一名即将毕业的学生,​​我想我希望将这些知识推向前进。话虽如此,LINQ如何根据我在幕后提供的条件找到我需要的数据?

考虑:

String[] straAr = {"Jordan","Jansyn","Corey","Josh","Whitney"};

var sel = from S in straAr
    where S.Contains("syn")
    select S;

这当然会导致“Jansyn”。在我介绍LINQ之前,我会这样做:

String[] straAr = {"Jordan","Jansyn","Corey","Josh","Whitney"};

foreach(String s in straAr)
{
    if(s.Contains("syn"))
    {
        Console.WriteLine(s);
    }
}

他们都工作,但我认为LINQs的实现更加优雅。谁能告诉我:

  • LINQ如何在幕后查询数据结构?的foreach吗

  • 一种实施方式比另一种更有效吗?

一如既往,感谢任何意见!

1 个答案:

答案 0 :(得分:3)

我认为了解LINQ内部的最佳方法是实际查看代码。好吧,你将无法查看原始代码,但Edulinq实际上是一个很好的重新实现它的全部功能用于教育目的。

直接回答至少部分问题:

  • 没有LINQ通常不会在内部使用foreach。大多数情况下,enumerators直接使用,因为这样可以更好地控制正在发生的事情
  • 通常,第二个实现会更有效,因为LINQ提供了一些额外的功能(例如懒惰),这些功能使生成的代码稍微复杂化。然而,这在praxis中几乎没有任何意义