menyelesaikan masalah cast generik dalam usercontrol WPF
Aplikasi WPF sering menggunakan asas usercontrols sebagai templat untuk khusus, yang diperolehi oleh usercontrols. Walau bagaimanapun, persediaan ini boleh membawa kepada kesukaran apabila menghantar jenis generik antara kawalan ini.
kesukaran pemutus
usercontrol yang diperoleh sering mengendalikan peristiwa dengan memanggil kaedah dalam usercontrol asas mereka. Kaedah asas ini mungkin mengharapkan jenis DataContext generik tertentu. Jika DataContext UserControl yang diperolehi adalah jenis generik yang diperolehi (mis., bukannya BaseViewModel<wire>
), cuba membuangnya ke jenis yang dijangkakan oleh UserControl yang diharapkan dalam BaseViewModel<part>
InvalidCastException
akar masalah
Kegagalan pemutus ini berpunca daripada sifat asas generik. Setiap instantiasi generik, seperti dan
, adalah jenis yang berbeza. Pemutus dari ke List<wolf>
tidak dibenarkan kerana ia boleh membuat ketidakkonsistenan.
List<animal>
contohnya, membenarkan pelakon dari List<wolf>
ke List<animal>
akan membenarkan menambah (haiwan, tetapi bukan serigala). Ini akan mewujudkan yang tidak sah yang mengandungi elemen yang tidak sesuai.
Mengelakkan kesilapan pemutus
List<wolf>
pemutus langsung dari List<animal>
ke Sheep
sememangnya tidak selamat dan harus dielakkan. List<wolf>
Daripada pemutus, pertimbangkan untuk menggunakan bersama dan pelanggaran. Pendekatan ini membolehkan keserasian antara jenis generik tetapi hanya sesuai untuk antara muka, bukan kelas. Corak reka bentuk alternatif, seperti suntikan ketergantungan atau menggunakan kelas asas/antara muka, mungkin lebih sesuai untuk menyelesaikan masalah ini.
Atas ialah kandungan terperinci Bagaimanakah saya dapat menyelesaikan masalah cast generik yang tidak dapat ditukar dalam usercontrol WPF?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!