Enumerable.OfType<TResult>(IEnumerable) Methode

Definitie

Hiermee filtert u de elementen van een IEnumerable op basis van een opgegeven type.

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)

Type parameters

TResult

Het type waarop de elementen van de reeks moeten worden gefilterd.

Parameters

source
IEnumerable

De IEnumerable elementen waarvan u wilt filteren.

Retouren

IEnumerable<TResult>

Een IEnumerable<T> met elementen uit de invoervolgorde van het type TResult.

Uitzonderingen

source is null.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe OfType u de elementen van een IEnumerablebestand filtert.

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
' Create an ArrayList and add items to it.
Dim fruits As New ArrayList() From {
    "Mango",
    "Orange",
    Nothing,
    "Apple",
    3.0,
    "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.Contains("n"c, StringComparison.CurrentCultureIgnoreCase))

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

Opmerkingen

Deze methode wordt geïmplementeerd met behulp van de uitgestelde uitvoering. De onmiddellijke retourwaarde is een object waarin alle informatie wordt opgeslagen die nodig is om de actie uit te voeren. De query die door deze methode wordt vertegenwoordigd, wordt pas uitgevoerd nadat het object is geïnventariseerd door de methode GetEnumerator rechtstreeks aan te roepen of door foreach te gebruiken in C# of For Each in Visual Basic.

De OfType<TResult>(IEnumerable) methode retourneert alleen de elementen die source niet null zijn en compatibel zijn met het type TResult. Als u een uitzondering wilt ontvangen als een element niet kan worden gecast om te typen TResult, gebruikt u Cast<TResult>(IEnumerable).

Deze methode is een van de weinige standaardqueryoperatormethoden die kunnen worden toegepast op een verzameling met een niet-geparameteriseerd type, zoals een ArrayList. Dit komt doordat OfType het type IEnumerablewordt uitgebreid. OfType kan niet alleen worden toegepast op verzamelingen die zijn gebaseerd op het geparameteriseerde IEnumerable<T> type, maar ook op verzamelingen die zijn gebaseerd op het niet-geparameteriseerde IEnumerable type.

Door toe te passen op OfType een verzameling die wordt geïmplementeerd IEnumerable, krijgt u de mogelijkheid om een query uit te voeren op de verzameling met behulp van de standaardqueryoperators. Als u bijvoorbeeld een typeargument van Object opgeeft voor OfType, wordt een object van het type IEnumerable<Object> in C# of IEnumerable(Of Object) in Visual Basic geretourneerd, waarop de standaardqueryoperators kunnen worden toegepast.

Van toepassing op