Прочитать на английском

Поделиться через


Enumerable.AsEnumerable<TSource>(IEnumerable<TSource>) Метод

Определение

Возвращает входное значение, типизированное как IEnumerable<T>.

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 метода типа, когда требуется реализация стандартного оператора запроса.

// 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> и имеет собственные методы, такие как Where, Selectи SelectMany, вызов Where будет вызывать открытый Where метод .Table Тип Table , представляющий таблицу базы данных, может иметь Where метод , который принимает аргумент предиката в виде дерева выражений и преобразует дерево в SQL для удаленного выполнения. Если удаленное выполнение нежелательно, например из-за того, что предикат вызывает локальный метод, AsEnumerable метод можно использовать для скрытия пользовательских методов и вместо этого сделать стандартные операторы запросов доступными.

Применяется к