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

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


Enumerable.OfType<TResult>(IEnumerable) Метод

Определение

Выполняет фильтрацию элементов объекта IEnumerable по заданному типу.

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

Параметры типа

TResult

Тип, по которому фильтруются элементы последовательности.

Параметры

source
IEnumerable

Объект IEnumerable, элементы которого следует фильтровать.

Возвращаемое значение

IEnumerable<TResult>

Объект IEnumerable<T>, содержащий элементы входной последовательности типа TResult.

Исключения

source имеет значение null.

Примеры

В следующем примере кода показано, как использовать для OfType фильтрации элементов объекта IEnumerable.

C#
System.Collections.ArrayList fruits = new()
{
    "Mango",
    "Orange",
    null,
    "Apple",
    3.0,
    "Banana"
};

// Apply OfType() to the ArrayList.
IEnumerable<string> query1 = fruits.OfType<string>();

Console.WriteLine("Elements of type 'string' are:");
foreach (string fruit in query1)
{
    Console.WriteLine(fruit);
}

// The following query shows that the standard query operators such as
// Where() can be applied to the ArrayList type after calling OfType().
IEnumerable<string> query2 =
    fruits.OfType<string>().Where(fruit =>
    fruit.Contains('n', StringComparison.CurrentCultureIgnoreCase));

Console.WriteLine("\nThe following strings contain 'n':");
foreach (string fruit in query2)
{
    Console.WriteLine(fruit);
}

// This code produces the following output:
//
// Elements of type 'string' are:
// Mango
// Orange
// Apple
// Banana
//
// The following strings contain 'n':
// Mango
// Orange
// Banana

Комментарии

Этот метод реализуется с помощью отложенного выполнения. Немедленное возвращаемое значение — это объект, в котором хранятся все сведения, необходимые для выполнения действия. Запрос, представленный этим методом, не выполняется, пока объект не будет перечислен либо путем вызова его GetEnumerator метода напрямую, либо с помощью foreach в C# или For Each в Visual Basic.

Метод OfType<TResult>(IEnumerable) возвращает только те элементы в source , которые не являются null и совместимы с типом TResult. Чтобы получить исключение, если элемент не может быть приведен к типу TResult, используйте Cast<TResult>(IEnumerable).

Этот метод является одним из немногих стандартных методов оператора запроса, который можно применить к коллекции с непараметровизованным типом, например ArrayList. Это связано с тем, что OfType расширяет тип IEnumerable. OfType не может применяться только к коллекциям, основанным на параметризованном IEnumerable<T> типе, но коллекции, основанные на непараметровизованном IEnumerable типе.

Применяя OfType к коллекции, реализующей IEnumerable, вы получаете возможность запрашивать коллекцию с помощью стандартных операторов запросов. Например, при указании аргумента Object типа для OfType возвращается объект типа IEnumerable<Object> в C# или IEnumerable(Of Object) Visual Basic, к которому можно применить стандартные операторы запроса.

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

Продукт Версии
.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