c# pengendali bersyarat dan pemutus byte tersirat: isu keselamatan jenis
Menggunakan pengendali bersyarat () dengan pemutus byte tersirat boleh membawa kepada kesilapan kompilasi dalam C#. Contohnya, ? :
aByteValue = aBoolValue ? 1 : 0;
sistem menaip kuat C#memerlukan jenis yang serasi dalam tugasan. Jenis pengendali bersyarat ditentukan oleh ungkapan sebenar dan palsu. Dalam contoh,
adalah bilangan bulat, menjadikan keseluruhan ungkapan integer. Menetapkan integer ini kepada pembolehubah 1
(0
) adalah bermasalah kerana byte
mempunyai julat yang lebih kecil daripada aByteValue
. Pengkompil menghalang penukaran tersirat ini untuk mengekalkan keselamatan jenis. byte
int
Penyelesaian ini melibatkan pemutus eksplisit:
aByteValue = aBoolValue ? (byte)1 : (byte)0;
Tingkah laku ini berpunca daripada mekanisme kesimpulan jenis C#, yang mengutamakan penentuan jenis ekspresi secara bebas dari sasaran tugasan mereka. Ini memastikan keselamatan jenis walaupun dengan pelbagai sasaran tugasan yang berbeza -beza.
Satu-satunya pengecualian untuk peraturan ini adalah dengan ekspresi Lambda, di mana kesimpulan jenis berasaskan konteks digunakan untuk keserasian dengan kod sekitarnya.
Atas ialah kandungan terperinci Mengapa C# membuang ralat apabila menggunakan pengendali bersyarat dengan pemutus byte tersirat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!