2

これはどういう意味ですか:

IEnumerable<int> query = from num in list
                         where num < 3
                         select num;

これはIEnumerable<T>としてのオブジェクトですか?

誰でもこれを説明できますか?

4

2 に答える 2

5

通常のメソッドの構文は知っていますよね? のようなものlist.Add(10)。Microsoft の賢明な人たちは、多くのコレクションとリストに類似点があると指摘しました。人々は、特定の値を選択し、すべてのコレクションで機能する値を合計するなどのことを好むかもしれませんが、すべてのコレクションがメソッドを提供する必要はありません。

したがって、拡張メソッドが導入されました。これは、一度だけ定義されるが、コレクションなどの特定のタイプのすべてのオブジェクトに適用できるメソッドです。例はlist.Wherelist.Sumです。拡張メソッドを使用するには、それらが定義されている名前空間を追加する必要があります。拡張メソッドは、コレクションのWhereすべての要素に対して実行されるラムダ式を取ります。

整数のリストがあるとしましょう:

List<int> list = new List<int>();
list.Add(-1);
list.Add(0);
list.Add(1);
list.Add(2);
list.Add(3);
list.Add(4);

次に、以前は次のコードを記述して、3 未満の整数のみを取得する必要がありました。

List<int> query = new List<int>();
foreach(var nr in list)
{
    if (nr < 3)
        query.Add(nr);
}

拡張メソッドを使用すると、次のように記述できます。

IEnumerable<int> query = list.Where(nr => nr < 3);

列挙されると、3 未満queryの整数のみが返されます。listこれらの拡張メソッドは、統合言語クエリである LINQ の一部です。

ただし、LINQ を使いやすくするために、新しい構文を考案しました。この新しい構文により、LINQ の読み書きが容易になります。

IEnumerable<int> query = from nr in list
                         where nr < 3
                         select nr;

Whereコンパイラは新しい構文を受け取り、メソッドを含む前述のコードに変換します。おわかりのように、これはコレクションの操作を簡単にするための単なる構文糖衣です。

IEnumerable<int>インターフェイスは、列挙可能なオブジェクトの汎用インターフェイスです。列挙の最も単純な形式はforeach、オブジェクトに対して行うことであり、含まれるすべての整数を 1 つずつ返します。そのため、LINQ クエリは何らかの objectを返しますが、正確な型はわかりません。しかし、それは列挙できることを知っており、これは非常に便利です。

于 2012-08-04T11:50:45.740 に答える
2

それは言うのと同等のlinqです

IEnumerable<int> GetLessThanThree(IEnumerable<int> list)
{
   foreach(int num in list)
   {
     if (num < 3)
     {
        yield return num
     }
   }
}

または、まだ収量に達していない場合

IEnumerable<int> GetLessThanThree(IEnumerable<int> list)
{
   List<int> result = new List<int>();
   foreach(int num in list)
   {
     if (num < 3)
     {
        result.Add(num);
     }
   }
   return result;
}
于 2012-08-04T11:50:48.580 に答える