Perché il casting di in un byte
in .NET fornisce il seguente output?Conversione di booleano in byte in VB.NET
Codice snippit:
Dim x As Boolean = 1
Dim y As Byte = x 'Implicit conversion here from Boolean to Byte
System.Diagnostics.Debug.Print(_
"x = " & x.ToString _
& " y = " & y.ToString _
& " (bool)(1) = " & CType(1, Boolean).ToString _
& " (byte)((bool)1) = " & CType((CType(1, Boolean)), Byte).ToString)
uscita:
x = True
y = 255
(bool) (1) = True
(byte) ((bool) 1) = 255
Perché True
(w che viene comunemente indicato come una rappresentazione intera di 1) convertito in 255 quando viene convertito in uno byte
?
Mi sembra strano che VB.NET ti permetta anche di lanciare un booleano su un byte. In C# è un cast illegale. – vcsjones
Se esegui un 'DirectCast()' in VB.NET, ti dirà automaticamente che è un cast illegale, ma se usi 'CType()' (che ho mostrato), farà come sopra. Sono interessato a sapere come 'True' che è comunemente noto come' 1', si traduce in '255' sotto il cofano. Un sacco di casting strano sta succedendo qui. – afuzzyllama
Penso che questo sia solo il comportamento del compilatore. Emette IL 'ldc.i4 FF 00 00 00', anche se non riesco a vedere nulla nelle specifiche che dicono il perché. Per casi molto semplici il compilatore sta semplicemente ottimizzando il cast. – vcsjones