Enumerable.Cast<TResult>(IEnumerable) Método

Definición

Convierte los elementos de IEnumerable en el tipo especificado.

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

Parámetros de tipo

TResult

Tipo al que se convierten los elementos de source.

Parámetros

source
IEnumerable

IEnumerable que contiene los elementos que se van a convertir al tipo TResult.

Devoluciones

IEnumerable<TResult>

IEnumerable<T> que contiene cada elemento de la secuencia de origen convertido al tipo especificado.

Excepciones

source es null.

Un elemento de la secuencia no se puede convertir al tipo TResult.

Ejemplos

En el ejemplo de código siguiente se muestra cómo usar Cast<TResult>(IEnumerable) para habilitar el uso de los operadores de consulta estándar en un .ArrayList

System.Collections.ArrayList fruits = new System.Collections.ArrayList();
fruits.Add("mango");
fruits.Add("apple");
fruits.Add("lemon");

IEnumerable<string> query =
    fruits.Cast<string>().OrderBy(fruit => fruit).Select(fruit => fruit);

// The following code, without the cast, doesn't compile.
//IEnumerable<string> query1 =
//    fruits.OrderBy(fruit => fruit).Select(fruit => fruit);

foreach (string fruit in query)
{
    Console.WriteLine(fruit);
}

// This code produces the following output:
//
// apple
// lemon
// mango
' Create an ArrayList and add items to it.
Dim fruits As New System.Collections.ArrayList()
fruits.Add("mango")
fruits.Add("apple")
fruits.Add("lemon")

' Call Cast(Of String) to cast the ArrayList elements to strings.
Dim query As IEnumerable(Of String) =
fruits.Cast(Of String)().OrderBy(Function(fruit) fruit).Select(Function(fruit) fruit)

'' The following code, without the cast, doesn't compile.
'Dim query As IEnumerable(Of String) = _
'    fruits.OrderBy(Function(fruit) fruit).Select(Function(fruit) fruit)

Dim output As New System.Text.StringBuilder
For Each fruit As String In query
    output.AppendLine(fruit)
Next

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

' This code produces the following output:
'
' apple
' lemon
' mango

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 mediante una llamada a su GetEnumerator método directamente o mediante foreach en Visual C# o For Each en Visual Basic.

El Cast<TResult>(IEnumerable) método permite invocar a los operadores de consulta estándar en colecciones no genéricas proporcionando la información de tipo necesaria. Por ejemplo, ArrayList no implementa IEnumerable<T>, pero llamando a Cast<TResult>(IEnumerable) en el ArrayList objeto , los operadores de consulta estándar se pueden usar para consultar la secuencia.

Si no se puede convertir un elemento en el tipo TResult, este método produce una InvalidCastExceptionexcepción .

La secuencia de origen de este método es IEnumerable, lo que significa que los elementos tienen el tipo estático en tiempo de compilación de object. Las únicas conversiones de tipo realizadas por este método son conversiones de referencia y conversiones unboxing. El tipo en tiempo de ejecución de los elementos de la colección debe coincidir con el tipo de destino o, en el caso de los tipos de valor, el tipo en tiempo de ejecución de los elementos debe ser el resultado de una conversión boxing del tipo de destino. No se permiten otros tipos de conversión, como los de tipos numéricos diferentes.

Para obtener solo los elementos que se pueden convertir al tipo TResult, use el OfType método en lugar de Cast<TResult>(IEnumerable).

En una expresión de consulta, una variable de iteración con tipo explícito se traduce en una invocación de Cast<TResult>(IEnumerable). En este ejemplo se muestra la sintaxis de una variable de rango con tipo explícito.

from int i in objects
From i As Integer In objects

Use la select cláusula de una consulta para realizar otros tipos de conversión, como las conversiones numéricas implícitas. En el ejemplo siguiente se usa el Cast método y una select instrucción para convertir una secuencia de enteros con conversión boxing en una secuencia de dobles.

IEnumerable sequence = Enumerable.Range(0, 10);
var doubles = from int item in sequence
                select (double)item;
Dim sequence As IEnumerable = Enumerable.Range(0, 10)
Dim doubles = From item As Integer In sequence
                Select CType(item, Double)

Se aplica a

Consulte también