Leer en inglés

Compartir a través de


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

Definición

Convierte los elementos de IEnumerable en el tipo especificado.

C#
public static System.Collections.Generic.IEnumerable<TResult> Cast<TResult> (this System.Collections.IEnumerable source);

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

C#
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

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 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.

C#
from int i 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.

C#
IEnumerable sequence = Enumerable.Range(0, 10);
var doubles = from int item in sequence
                select (double)item;

Se aplica a

Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Consulte también