¿Por qué un boolean
de fundición a byte
en .NET da el siguiente resultado?Convirtiendo Boolean a Byte en VB.NET
Código 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)
de salida:
x = True
y = 255
(bool) (1) = True
(byte) ((bool) 1) = 255
¿Por qué True
(w Lo que comúnmente se conoce como una representación entera de 1) se convierte a 255 cuando se convierte en byte
?
Me resulta curioso que VB.NET incluso te permita convertir un booleano en un byte. En C# eso es un elenco ilegal. – vcsjones
Si haces un 'DirectCast()' en VB.NET automáticamente te dirá que es un lanzamiento ilegal, pero si usas 'CType()' (que he mostrado), hará lo que se indica arriba. Me interesa saber cómo 'True', que se conoce comúnmente como' 1', se traduce en '255' debajo del capó. Un montón de casting raro pasando aquí. – afuzzyllama
Creo que este es solo el comportamiento del compilador. Emite el IL 'ldc.i4 FF 00 00 00', aunque no puedo ver nada en la especificación que diga por qué. Para casos muy simples, el compilador solo está optimizando el lanzamiento. – vcsjones