2

世界で最も重要な質問ではありませんが、もうすぐ卒業するので、この知識を前に進めたいと思いました. そうは言っても、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);
    }
}

どちらも機能しますが、LINQ の実装ははるかに洗練されていると思います。誰でも教えてもらえますか:

  • LINQ はバックグラウンドでデータ構造をどのようにクエリしますか? フォーチ?

  • ある実装は他の実装よりも効率的ですか?

いつものように、ご意見をお寄せいただきありがとうございます。

4

1 に答える 1

3

LINQ の内部構造を理解するには、実際にコードを見てみるのが一番だと思います。元のコードを見ることはできませんが、Edulinqは、教育目的で完全な機能を再実装したものです。

質問の少なくとも一部に直接答えるには:

  • 通常、LINQ は内部で foreach を使用しません。ほとんどの場合、何が起こっているかをより細かく制御できるため、列挙子が直接使用されます。
  • 一般に、2 番目の実装はより効率的です。これは、LINQ が生成コードを少し複雑にするいくつかの追加機能 (遅延など) を提供するためです。ただし、これは実際にはほとんど関係ありません。
于 2013-03-20T05:19:45.613 に答える