英語で読む

次の方法で共有


Enumerable.AsEnumerable<TSource>(IEnumerable<TSource>) メソッド

定義

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

C#
public static System.Collections.Generic.IEnumerable<TSource> AsEnumerable<TSource> (this System.Collections.Generic.IEnumerable<TSource> source);

型パラメーター

TSource

source の要素の型。

パラメーター

source
IEnumerable<TSource>

IEnumerable<T> として型指定するシーケンス。

戻り値

IEnumerable<TSource>

IEnumerable<T> として型指定された入力シーケンス。

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

C#
// Custom class.
class Clump<T> : List<T>
{
    // Custom implementation of Where().
    public IEnumerable<T> Where(Func<T, bool> predicate)
    {
        Console.WriteLine("In Clump's implementation of Where().");
        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"));

    Console.WriteLine("query1 has been created.\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.
    Console.WriteLine("query2 has been created.");
}

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

注釈

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

AsEnumerable<TSource>(IEnumerable<TSource>) を使用すると、シーケンス IEnumerable<T> が実装されているが、使用できるパブリック クエリ メソッドのセットが異なる場合に、クエリ実装を選択できます。 たとえば、 を実装IEnumerable<T>し、独自のメソッド (、SelectManySelect、 などWhere) を持つジェネリック クラスTableを指定すると、 のWhereパブリック Where メソッドTableが呼び出されます。 Tableデータベース テーブルを表す型には、述語引数をWhere式ツリーとして受け取り、リモート実行のためにツリーを SQL に変換するメソッドを使用できます。 たとえば、述語がローカル メソッドを呼び出すなどの理由でリモート実行が必要ない場合は、 メソッドを AsEnumerable 使用してカスタム メソッドを非表示にし、代わりに標準クエリ演算子を使用できるようにします。

適用対象

製品 バージョン
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0