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

Definição

Converte os elementos de um IEnumerable para o 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

O tipo no qual os elementos de source deverão ser convertidos.

Parâmetros

source
IEnumerable

O IEnumerable que contém os elementos a serem convertidos no tipo TResult.

Retornos

IEnumerable<TResult>

Um IEnumerable<T> que contém cada elemento da sequência de origem convertido para o tipo especificado.

Exceções

source é null.

Um elemento na sequência não pode ser convertido para o tipo TResult.

Exemplos

O exemplo de código a seguir demonstra como usar Cast<TResult>(IEnumerable) para habilitar o uso dos operadores de consulta padrão em um 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

Comentários

Esse método é implementado usando a execução adiada. O valor de retorno imediato é um objeto que armazena todas as informações necessárias para executar a ação. A consulta representada por esse método não é executada até que o objeto seja enumerado chamando seu GetEnumerator método diretamente ou usando foreach no Visual C# ou For Each em Visual Basic.

O Cast<TResult>(IEnumerable) método permite que os operadores de consulta padrão sejam invocados em coleções não genéricas fornecendo as informações de tipo necessárias. Por exemplo, ArrayList não implementa IEnumerable<T>, mas ao chamar Cast<TResult>(IEnumerable) o ArrayList objeto, os operadores de consulta padrão podem ser usados para consultar a sequência.

Se um elemento não puder ser convertido em tipo TResult, esse método gerará um InvalidCastException.

A sequência de origem para esse método é IEnumerable, o que significa que os elementos têm o tipo estático de tempo de compilação de object. As únicas conversões de tipo executadas por esse método são conversões de referência e conversões de unboxing. O tipo de runtime dos elementos na coleção deve corresponder ao tipo de destino ou, no caso de tipos de valor, o tipo de runtime de elementos deve ser o resultado de uma conversão boxing do tipo de destino. Outros tipos de conversão, como aqueles entre tipos numéricos diferentes, não são permitidos.

Para obter apenas os elementos que podem ser convertidos em tipo TResult, use o OfType método em vez de Cast<TResult>(IEnumerable).

Em uma expressão de consulta, uma variável de iteração tipada explicitamente se traduz em uma invocação de Cast<TResult>(IEnumerable). Este exemplo mostra a sintaxe de uma variável de intervalo tipada explicitamente.

from int i in objects
From i As Integer In objects

Use a select cláusula de uma consulta para executar outros tipos de conversão, como as conversões numéricas implícitas. O exemplo a seguir usa o Cast método e uma select instrução para converter uma sequência de inteiros em caixa em uma sequência de duplas.

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)

Aplica-se a

Confira também