Enumerable.OfType<TResult>(IEnumerable) Metod

Definition

Filtrerar elementen i en IEnumerable baserat på en angiven typ.

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)

Typparametrar

TResult

Den typ som elementen i sekvensen ska filtreras på.

Parametrar

source
IEnumerable

Vars IEnumerable element ska filtreras.

Returer

IEnumerable<TResult>

En IEnumerable<T> som innehåller element från indatasekvensen av typen TResult.

Undantag

source är null.

Exempel

Följande kodexempel visar hur du använder OfType för att filtrera elementen i en IEnumerable.

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

Kommentarer

Den här metoden implementeras med uppskjuten körning. Det omedelbara returvärdet är ett objekt som lagrar all information som krävs för att utföra åtgärden. Frågan som representeras av den här metoden körs inte förrän objektet räknas upp antingen genom att anropa metoden GetEnumerator direkt eller med hjälp av foreach i C# eller For Each i Visual Basic.

Metoden OfType<TResult>(IEnumerable) returnerar endast de element i source som inte är null och kompatibla med typen TResult. Om du vill få ett undantag om ett element inte kan gjutas för att skriva TResultanvänder du Cast<TResult>(IEnumerable).

Den här metoden är en av de få standardmetoder för frågeoperatorer som kan tillämpas på en samling som har en icke-parameteriserad typ, till exempel en ArrayList. Det beror på att OfType utökar typen IEnumerable. OfType kan inte bara tillämpas på samlingar som baseras på den parameteriserade IEnumerable<T> typen, utan även samlingar som baseras på den icke-parametriserade IEnumerable typen.

Genom att tillämpa OfType på en samling som implementerar IEnumerablefår du möjlighet att köra frågor mot samlingen med hjälp av vanliga frågeoperatorer. Om du till exempel anger ett typargument av Object till OfType returneras ett objekt av typen IEnumerable<Object> i C# eller IEnumerable(Of Object) i Visual Basic, som standardfrågaoperatorerna kan tillämpas på.

Gäller för