Senarai Casting
Pertimbangkan kod berikut:
public interface IDic { int Id { get; set; } string Name { get; set; } } public class Client : IDic { } List<Client> clients = new List<Client>();
Ramai pengaturcara mungkin menganggap bahawa mereka boleh menghantar Senarai
List<IDic> dics = (List<IDic>)clients;
Walau bagaimanapun, ini bukan pelakon yang sah. Pelakon jenis ini tidak dibenarkan kerana ia akan melanggar keselamatan jenis. Jika anda mencuba pelakon ini, ralat berikut akan berlaku:
Cannot convert type 'System.Collections.Generic.List<Client>' to 'System.Collections.Generic.List<IDic>'
Mengapa Pelakon ini Tidak Dibenarkan?
Sebab pelakon ini tidak dibenarkan adalah disebabkan oleh berpotensi untuk tingkah laku yang tidak selamat. Sebagai contoh, bayangkan senario ini:
public interface IFruit {} public class Apple : IFruit {} public class Banana : IFruit {} ... List<Apple> apples = new List<Apple>(); List<IFruit> fruit = (List<IFruit>)apples; // Assumed cast fruit.Add(new Banana()); // Eek - it's a banana! Apple apple = apples[0];
Dalam contoh ini, Senarai
Pilihan Penukaran Selamat
Walaupun anda tidak boleh terus menghantar Senarai
List<IFruit> fruit = apples.ToList<IFruit>();
List<IFruit> fruit = apples.Cast<IFruit>().ToList();
Adalah penting untuk ambil perhatian bahawa penukaran ini mencipta senarai baharu. Perubahan yang dibuat pada satu senarai tidak akan ditunjukkan dalam senarai yang lain. Walau bagaimanapun, perubahan yang dibuat pada objek dalam senarai akan kelihatan dalam kedua-dua senarai.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menghantar `Senarai` ke `Senarai` secara Terus dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!