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

Определение

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

public:
generic <typename TResult>
[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<TResult> ^ OfType(System::Collections::IEnumerable ^ source);
public static System.Collections.Generic.IEnumerable<TResult> OfType<TResult> (this System.Collections.IEnumerable source);
static member OfType : System.Collections.IEnumerable -> seq<'Result>
<Extension()>
Public Function OfType(Of TResult) (source As IEnumerable) As IEnumerable(Of TResult)

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

TResult

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

Параметры

source
IEnumerable

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

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

IEnumerable<TResult>

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

Исключения

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

Примеры

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

System.Collections.ArrayList fruits = new System.Collections.ArrayList(4);
fruits.Add("Mango");
fruits.Add("Orange");
fruits.Add("Apple");
fruits.Add(3.0);
fruits.Add("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.ToLower().Contains("n"));

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
' Create an ArrayList and add items to it.
Dim fruits As New System.Collections.ArrayList(4)
fruits.Add("Mango")
fruits.Add("Orange")
fruits.Add("Apple")
fruits.Add(3.0)
fruits.Add("Banana")

' Apply OfType(Of String)() to the ArrayList
' to filter out non-string items.
Dim query1 As IEnumerable(Of String) = fruits.OfType(Of String)()

' Print the results.
Dim output As New System.Text.StringBuilder("Elements of type 'string' are:" _
                                        & vbCrLf)
For Each fruit As String In query1
    output.AppendLine(fruit)
Next

' The following query shows that the standard query operators such as 
' Where() can be applied to the ArrayList type after calling OfType().
Dim query2 As IEnumerable(Of String) =
fruits.OfType(Of String)().Where(Function(fruit) _
                                     fruit.ToLower().Contains("n"))

output.AppendLine(vbCrLf & "The following strings contain 'n':")
For Each fruit As String In query2
    output.AppendLine(fruit)
Next

' Display the output.
Console.WriteLine(output.ToString())

' 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 помощью в Visual C# или в For Each Visual Basic.

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

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

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

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