Perbezaan antara Cast() dan OfType() dalam LINQ: pemahaman mendalam
Dalam LINQ, apabila bekerja dengan koleksi yang mungkin mengandungi unsur jenis berbeza, anda mungkin perlu menukar keseluruhan koleksi kepada jenis tertentu. LINQ menyediakan dua kaedah untuk tujuan ini: Cast() dan OfType().
Kaedah Cast()
Cast() cuba menukar semua elemen dalam koleksi kepada jenis yang ditentukan. Jika mana-mana elemen tidak berjaya dihantar, InvalidCastException akan dilemparkan. Kaedah ini berguna apabila anda pasti bahawa semua elemen dalam koleksi boleh ditukar kepada jenis yang diperlukan.
Kaedah OfType()
Tidak seperti Cast(), OfType() hanya mengembalikan elemen dalam koleksi yang boleh dihantar dengan selamat kepada jenis yang ditentukan. Ia tidak cuba menukar semua elemen, jadi tiada pengecualian dilemparkan. Kaedah ini berguna apabila anda hanya mahu menapis elemen yang boleh ditukar.
Contoh penggunaan
Pertimbangkan kod berikut:
<code class="language-csharp">object[] objs = new object[] { "12345", 12 };</code>
Jika anda cuba menggunakan Cast() untuk menukar tatasusunan ini kepada koleksi rentetan, anda akan menerima InvalidCastException kerana salah satu elemen ialah integer.
<code class="language-csharp">IEnumerable<string> someCollection = objs.Cast<string>();</code>
Walau bagaimanapun, jika anda menggunakan OfType(), ia hanya akan mengembalikan elemen yang boleh ditukar dengan selamat kepada rentetan.
<code class="language-csharp">IEnumerable<string> someCollection = objs.OfType<string>();</code>
Dalam kes ini, someCollection akan mengandungi hanya satu elemen: "12345".
Ringkasan
Cast() dan OfType() ialah dua kaedah LINQ yang mempunyai tujuan berbeza apabila bekerja dengan koleksi jenis campuran. Cast() cuba menghantar semua elemen, manakala OfType() hanya memilih elemen yang selamat untuk dihantar. Gunakan Cast() apabila anda pasti tentang jenis casting; gunakan OfType() apabila anda hanya mahu menapis elemen yang sah.
Atas ialah kandungan terperinci Cast() atau OfType() dalam LINQ: Bilakah Saya Perlu Menggunakan Yang Mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!