Enumerable.Cast<TResult>(IEnumerable) Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Conjura os elementos de an 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 Genérico
- TResult
O tipo para lançar os elementos de source .
Parâmetros
- source
- IEnumerable
O IEnumerable que contém os elementos a ser lançados para o tipo TResult.
Devoluções
E IEnumerable<T> que contém cada elemento da sequência de origem lançado para o tipo especificado.
Exceções
source é null.
Um elemento na sequência não pode ser lançado para o tipo TResult.
Exemplos
O exemplo de código seguinte demonstra como usar Cast<TResult>(IEnumerable) para permitir a utilização dos operadores de consulta padrão num 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
Observações
Este método é implementado através da execução diferida. O valor de retorno imediato é um objeto que armazena toda a informação necessária para realizar a ação. A consulta representada por este método não é executada até que o objeto seja enumerado, seja chamando diretamente o seu método GetEnumerator ou usando foreach em C# ou For Each em Visual Basic.
O Cast<TResult>(IEnumerable) método permite invocar os operadores padrão de consulta em coleções não genéricas, fornecendo a informação de tipo necessária. Por exemplo, ArrayList não implementa IEnumerable<T>, mas ao chamar Cast<TResult>(IEnumerable) o ArrayList objeto, os operadores padrão de consulta podem então ser usados para consultar a sequência.
Se um elemento não pode ser convertido para tipo TResult, este método gera um InvalidCastException.
A sequência fonte deste método é IEnumerable, o que significa que os elementos têm o tipo estático em tempo de compilação de object. As únicas conversões de tipo realizadas por este método são as conversões de referência e as conversões de unboxing. O tipo de runtime dos elementos na coleção deve corresponder ao tipo de destino, ou, no caso dos tipos de valor, o tipo de runtime dos elementos deve ser o resultado de uma conversão boxing do tipo de destino. Outros tipos de conversão, como os entre diferentes tipos numéricos, não são permitidos.
Para obter apenas os elementos que podem ser convertidos para tipo TResult, use o OfType método em vez de Cast<TResult>(IEnumerable).
Numa expressão de consulta, uma variável de iteração explicitamente tipada traduz-se numa invocação de Cast<TResult>(IEnumerable). Este exemplo mostra a sintaxe de uma variável de intervalo explicitamente tipada.
from int i in objects
From i As Integer In objects
Use a select cláusula de uma consulta para realizar outros tipos de conversão, como as conversões numéricas implícitas. O exemplo seguinte utiliza tanto o Cast método como uma select instrução para converter uma sequência de inteiros em caixa numa sequência de duplos.
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)