爲什麼在.NET中將boolean
轉換爲byte
會給出以下輸出?在VB.NET中將布爾轉換爲字節
代碼片段:
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)
輸出:
X =真
Y = 255
(布爾)(1)= TRUE
(字節)((布爾)1 )= 255
爲什麼True
(w通常被稱爲1)的整數表示1)在轉換爲byte
時轉換爲255?
我覺得很奇怪VB.NET甚至可以讓你將一個布爾值轉換爲一個字節。在C#中這是非法的演員。 – vcsjones 2012-02-09 19:25:26
如果你在VB.NET中做了一個'DirectCast()',它會自動告訴你這是一個非法的強制轉換,但是如果你使用'CType()'(我已經展示過),它將按照上面的方式進行。我很想知道'True'這個通常被稱爲'1'的情況,轉化爲'255'。很多奇怪的鑄造在這裏進行。 – afuzzyllama 2012-02-09 19:30:06
我認爲這只是編譯器的行爲。它發出IL'ldc.i4 FF 00 00 00',但我在規範中看不到任何說明原因的內容。對於非常簡單的情況,編譯器只是優化演員陣容。 – vcsjones 2012-02-09 19:30:42