Enumerable.OfType<TResult>(IEnumerable) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Filtra los elementos de IEnumerable en función de un tipo especificado.
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)
Parámetros de tipo
- TResult
El tipo según el cual se van a filtrar los elementos de la secuencia.
Parámetros
- source
- IEnumerable
IEnumerable cuyos elementos se van a filtrar.
Devoluciones
Una interfaz IEnumerable<T> que contiene los elementos de la secuencia de entrada de tipo TResult
.
Excepciones
source
es null
.
Ejemplos
En el ejemplo de código siguiente se muestra cómo usar OfType para filtrar los elementos de .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
Comentarios
Este método se implementa mediante la ejecución diferida. El valor devuelto inmediato es un objeto que almacena toda la información necesaria para realizar la acción. La consulta representada por este método no se ejecuta hasta que el objeto se enumera llamando directamente a su GetEnumerator
método o mediante foreach
en C# o For Each
en Visual Basic.
El OfType<TResult>(IEnumerable) método devuelve solo los elementos de source
que no son NULL y son compatibles con el tipo TResult
. Para recibir una excepción si un elemento no se puede convertir al tipo TResult
, use Cast<TResult>(IEnumerable).
Este método es uno de los pocos métodos de operador de consulta estándar que se pueden aplicar a una colección que tiene un tipo no parametrizado, como .ArrayList Esto se debe a que OfType extiende el tipo IEnumerable. OfType no solo se puede aplicar a las colecciones que se basan en el tipo con parámetros IEnumerable<T> , sino que también se basan en el tipo no parametrizado IEnumerable .
Al aplicar OfType a una colección que implementa IEnumerable, obtiene la capacidad de consultar la colección mediante los operadores de consulta estándar. Por ejemplo, especificar un argumento de tipo de Object para OfType devolvería un objeto de tipo IEnumerable<Object>
en C# o IEnumerable(Of Object)
en Visual Basic, al que se pueden aplicar los operadores de consulta estándar.