Enumerable.Cast<TResult>(IEnumerable) Metode

Definisi

Mentransmisikan elemen dari IEnumerable ke jenis yang ditentukan.

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)

Jenis parameter

TResult

Jenis untuk melemparkan elemen source ke.

Parameter

source
IEnumerable

IEnumerable yang berisi elemen yang akan dilemparkan untuk mengetik TResult.

Mengembalikan

IEnumerable<TResult>

IEnumerable<T> yang berisi setiap elemen urutan sumber yang ditransmisikan ke jenis yang ditentukan.

Pengecualian

sourceadalah null.

Elemen dalam urutan tidak dapat dilemparkan ke jenis TResult.

Contoh

Contoh kode berikut menunjukkan cara menggunakan Cast<TResult>(IEnumerable) untuk mengaktifkan penggunaan operator kueri standar pada 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

Keterangan

Metode ini diimplementasikan dengan menggunakan eksekusi yang ditangguhkan. Nilai pengembalian langsung adalah objek yang menyimpan semua informasi yang diperlukan untuk melakukan tindakan. Kueri yang diwakili oleh metode ini tidak dijalankan sampai objek dijumlahkan baik dengan memanggil metodenya GetEnumerator secara langsung atau dengan menggunakan foreach dalam C# atau For Each di Visual Basic.

Metode ini Cast<TResult>(IEnumerable) memungkinkan operator kueri standar untuk dipanggil pada koleksi non-generik dengan menyediakan informasi jenis yang diperlukan. Misalnya, ArrayList tidak mengimplementasikan IEnumerable<T>, tetapi dengan memanggil Cast<TResult>(IEnumerable) pada ArrayList objek , operator kueri standar kemudian dapat digunakan untuk mengkueri urutan.

Jika elemen tidak dapat dikonversi ke jenis TResult, metode ini melemparkan InvalidCastException.

Urutan sumber untuk metode ini adalah IEnumerable, yang berarti elemen memiliki jenis statis waktu kompilasi object. Satu-satunya konversi jenis yang dilakukan oleh metode ini adalah konversi referensi dan konversi pembukaan kotak. Jenis runtime elemen dalam koleksi harus cocok dengan jenis target, atau dalam kasus jenis nilai, jenis runtime elemen harus merupakan hasil konversi tinju dari jenis target. Jenis konversi lainnya, seperti yang berada di antara jenis numerik yang berbeda, tidak diizinkan.

Untuk mendapatkan hanya elemen yang dapat dikonversi ke jenis TResult, gunakan OfType metode alih-alih Cast<TResult>(IEnumerable).

Dalam ekspresi kueri, variabel iterasi yang ditik secara eksplisit diterjemahkan ke pemanggilan Cast<TResult>(IEnumerable). Contoh ini menunjukkan sintaks untuk variabel rentang yang ditik secara eksplisit.

from int i in objects
From i As Integer In objects

select Gunakan klausa kueri untuk melakukan jenis konversi lainnya, seperti konversi numerik implisit. Contoh berikut menggunakan Cast metode dan select pernyataan untuk mengonversi urutan bilangan bulat kotak menjadi urutan ganda.

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)

Berlaku untuk

Lihat juga