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>)除了将 的source编译时类型从实现IEnumerable<T>IEnumerable<T>的类型更改为自身之外,没有其他效果。

AsEnumerable<TSource>(IEnumerable<TSource>) 当序列实现时,可用于在查询实现之间进行选择, IEnumerable<T> 但也提供一组不同的公共查询方法。 例如,假设一个泛型类Table实现 IEnumerable<T> 并具有自己的方法(如 WhereSelectSelectMany),对 的Where调用将调用 的公共WhereTable方法。 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