Enumerable.Cast<TResult>(IEnumerable) Metoda

Definicja

Rzutuje elementy IEnumerable określonego typu.Casts the elements of an IEnumerable to the specified type.

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)

Parametry typu

TResult

Typ, do którego mają być rzutowane elementy source.The type to cast the elements of source to.

Parametry

source
IEnumerable

IEnumerable, który zawiera elementy, które mają być rzutowane na TResulttypu.The IEnumerable that contains the elements to be cast to type TResult.

Zwraca

IEnumerable<TResult>

IEnumerable<T>, który zawiera wszystkie elementy sekwencji źródłowej rzutowane na określony typ.An IEnumerable<T> that contains each element of the source sequence cast to the specified type.

Wyjątki

Parametr source ma wartość null.source is null.

Elementu w sekwencji nie można rzutować na typ TResult.An element in the sequence cannot be cast to type TResult.

Przykłady

Poniższy przykład kodu demonstruje sposób użycia Cast<TResult>(IEnumerable), aby umożliwić korzystanie z standardowych operatorów zapytań na ArrayList.The following code example demonstrates how to use Cast<TResult>(IEnumerable) to enable the use of the standard query operators on an 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

Uwagi

Ta metoda jest implementowana za pomocą odroczonego wykonania.This method is implemented by using deferred execution. Bezpośrednio zwracana wartość jest obiektem, który przechowuje wszystkie informacje wymagane do wykonania akcji.The immediate return value is an object that stores all the information that is required to perform the action. Zapytanie reprezentowane przez tę metodę nie jest wykonywane do momentu wyliczenia obiektu przez wywołanie jego metody GetEnumerator bezpośrednio lub przy użyciu foreach w wizualizacji C# lub For Each w Visual Basic.The query represented by this method is not executed until the object is enumerated either by calling its GetEnumerator method directly or by using foreach in Visual C# or For Each in Visual Basic.

Metoda Cast<TResult>(IEnumerable) umożliwia wywoływanie standardowych operatorów zapytań na kolekcjach nieogólnych przez dostarczenie niezbędnych informacji o typie.The Cast<TResult>(IEnumerable) method enables the standard query operators to be invoked on non-generic collections by supplying the necessary type information. Na przykład ArrayList nie implementuje IEnumerable<T>, ale wywołując Cast<TResult>(IEnumerable) na obiekcie ArrayList, można następnie użyć standardowych operatorów zapytań do wykonywania zapytań do sekwencji.For example, ArrayList does not implement IEnumerable<T>, but by calling Cast<TResult>(IEnumerable) on the ArrayList object, the standard query operators can then be used to query the sequence.

Jeśli elementu nie można przekonwertować na typ TResult, ta metoda zgłasza InvalidCastException.If an element cannot be converted to type TResult, this method throws a InvalidCastException.

Sekwencja źródłowa tej metody jest IEnumerable, co oznacza, że elementy mają typ statyczny czasu kompilacji object.The source sequence for this method is IEnumerable, which means the elements have the compile-time static type of object. Jedyne konwersje typów, które są wykonywane przez tę metodę, to konwersje odwołań i konwersje rozpakowywanie.The only type conversions that are performed by this method are reference conversions and unboxing conversions. Typ środowiska uruchomieniowego elementów w kolekcji musi być zgodny z typem docelowym lub w przypadku typów wartości typ środowiska uruchomieniowego musi być wynikiem konwersji z opakowania typu docelowego.The runtime type of the elements in the collection must match the target type, or in the case of value types, the runtime type of elements must be the result of a boxing conversion of the target type. Inne typy konwersji, takie jak te między różnymi typami liczbowymi, są niedozwolone.Other conversion types, such as those between different numeric types, are not allowed.

Aby uzyskać tylko te elementy, które można przekonwertować na typ TResult, użyj metody OfType zamiast Cast<TResult>(IEnumerable).To obtain only those elements that can be converted to type TResult, use the OfType method instead of Cast<TResult>(IEnumerable).

W wyrażeniu zapytania jawnie wpisana Zmienna iteracji tłumaczy do wywołania Cast<TResult>(IEnumerable).In a query expression, an explicitly typed iteration variable translates to an invocation of Cast<TResult>(IEnumerable). Ten przykład pokazuje składnię dla jawnie wpisanej zmiennej zakresu.This example shows the syntax for an explicitly typed range variable.

from int i in objects  
From i As Integer In objects  

Użyj klauzuli select zapytania, aby wykonać inne typy konwersji, takie jak niejawne konwersje numeryczne.Use the select clause of a query to perform other conversion types, like the implicit numeric conversions. W poniższym przykładzie zastosowano zarówno metodę Cast, jak i instrukcję select, aby przekonwertować sekwencję liczb całkowitych opakowanych na sekwencję podwójnej precyzji.The following example uses both the Cast method and a select statement to convert a sequence of boxed integers to a sequence of doubles.

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)

Dotyczy

Zobacz też