情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Enumerable.AsEnumerable<TSource> メソッド

2013/12/12

IEnumerable<T> として型指定された入力を返します。

Namespace:  System.Linq
アセンブリ:  System.Core (System.Core.dll 内)

public static IEnumerable<TSource> AsEnumerable<TSource>(
	this IEnumerable<TSource> source
)

型パラメーター

TSource

source の要素の型。

パラメーター

source
型: System.Collections.Generic.IEnumerable<TSource>
IEnumerable<T> として型指定するシーケンス。

戻り値

型: System.Collections.Generic.IEnumerable<TSource>
IEnumerable<T> として型指定された入力シーケンス。

使用上の注意

Visual Basic および C# では、このメソッドを、IEnumerable<TSource> 型の任意のオブジェクトのインスタンス メソッドとして呼び出すことができます。インスタンス メソッド構文を使用してこのメソッドを呼び出す場合は、最初のパラメーターを省略します。

AsEnumerable<TSource>(IEnumerable<TSource>) メソッドには、source のコンパイル時の型を、IEnumerable<T> を実装する型から IEnumerable<T> 自体に変更すること以外の効果はありません。

シーケンスが IEnumerable<T> を実装しても、異なる一連の使用可能なパブリック クエリ メソッドも含む場合は、AsEnumerable<TSource>(IEnumerable<TSource>) を使用して、クエリ実装の中から選択できます。たとえば、IEnumerable<T> を実装し、WhereSelectSelectMany などの独自のメソッドを持つジェネリック クラスとして Table が存在する場合、Where の呼び出しによって TableWhere パブリック メソッドが呼び出されます。データベース テーブルを表す Table 型には、述語引数を式ツリーとして使用し、そのツリーをリモートで実行するために SQL に変換する Where メソッドがあります。たとえば、述語によってローカル メソッドが呼び出されるためリモートで実行する必要がない場合は、AsEnumerable<TSource> メソッドを使用し、カスタム メソッドを隠ぺいし、代わりに標準クエリ演算子を使用できるようにすることができます。

標準クエリ演算子を実装する必要がある場合に AsEnumerable<TSource>(IEnumerable<TSource>) を使用して、型の Where カスタム メソッドを隠ぺいする方法を次のコード例に示します。


   // Custom class.
   class Clump<T> : List<T>
   {
      // Custom implementation of Where().
      public IEnumerable<T> Where(Func<T, bool> predicate)
      {
         outputBlock.Text += "In Clump's implementation of Where()." + "\n";
         return Enumerable.Where(this, predicate);
      }
   }

   static void AsEnumerableEx1()
   {
      // Create a new Clump<T> object.
      Clump<string> fruitClump =
          new Clump<string> { "apple", "passionfruit", "banana", 
                 "mango", "orange", "blueberry", "grape", "strawberry" };

      // First call to Where():
      // Call Clump's Where() method with a predicate.
      IEnumerable<string> query1 =
          fruitClump.Where(fruit => fruit.Contains("o"));

      outputBlock.Text += "query1 has been created.\n" + "\n";

      // Second call to Where():
      // First call AsEnumerable() to hide Clump's Where() method and thereby
      // force System.Linq.Enumerable's Where() method to be called.
      IEnumerable<string> query2 =
          fruitClump.AsEnumerable().Where(fruit => fruit.Contains("o"));

      // Display the output.
      outputBlock.Text += "query2 has been created." + "\n";
   }

   // This code produces the following output:
   //
   // In Clump's implementation of Where().
   // query1 has been created.
   //
   // query2 has been created.



Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示: