public class A {}
public class B : A {}
sekarang apa cara terbaik untuk membuat ini berfungsi
List<A> a;
List<B> b = new List<B>();
a = b; // throw Cannot convert List<B> to List<A>
Terima kasih
public class A {}
public class B : A {}
sekarang apa cara terbaik untuk membuat ini berfungsi
List<A> a;
List<B> b = new List<B>();
a = b; // throw Cannot convert List<B> to List<A>
Terima kasih
Tipe List<T>
tidak mendukung kovarians, jadi Anda tidak dapat menetapkan List<B>
langsung ke List<A>
meskipun B
sendiri dapat ditetapkan langsung ke A
. Anda harus melewati daftar b
, mengonversi dan menambahkan item ke dalam daftar a
seiring berjalannya waktu. Metode ConvertAll
adalah cara mudah untuk melakukan hal ini:
List<B> b = new List<B>();
// ...
List<A> a = b.ConvertAll(x => (A)x);
ConvertAll
adalah metode instan pada kelas List<T>
dan membuat List<T>
baru dari daftar yang ada. Select
adalah metode ekstensi yang bekerja pada IEnumerable<T>
mana pun dan membuat urutan IEnumerable<T>
baru. Penggunaan ConvertAll
harus sedikit lebih cepat daripada Select
karena dapat melakukan beberapa optimasi (misalnya, dapat mengalokasikan array target ke panjang yang benar di awal daripada perlu mengubah ukurannya saat itu juga, dan ia dapat mengakses array yang mendasari daftar sumber secara langsung daripada perlu membuat instance dan menggunakan objek enumerator terpisah).
- person LukeH; 07.03.2011