2012-06-18 92 views
2
bool myBool = true; 
byte myByte; 
  • 這種轉換運行myByte = Convert.ToByte(myBool);
  • 這種轉換不運行myByte = (byte)myBool;

對於新手(me):爲什麼上面有什麼不同?布爾轉換爲字節

+0

看看這裏http://stackoverflow.com/questions/9217278/converting-boolean-to-byte-in-vb-net – V4Vendetta

回答

6

Convert.ToByte是一種方法 - 它可以做任何它想,大概沿着線:

return input ? (byte) 1 : (byte) 0; 

一投是語言級操作。它要求語言知道轉換本身,或者要求其中一種類型具有用戶定義的轉換以及正確的輸入和輸出類型。從bool轉換爲byte時,都不是這種情況。

基本上,該語言沒有定義什麼演員應該是什麼意思,所以編譯器禁止它。

+1

爲什麼你需要將1/0全部轉換爲'byte'?實際上,ILSpy說'ToByte'是通過以下方式實現的:'if(!value) \t { \t \t return 0; \t} \t return 1;' –

+0

@TimSchmelter:否則表達式的類型將是'int',所以無法返回。這真的沒關係 - 這些實現是等價的。 –

+0

我只是想知道爲什麼它不工作(當返回類型是'字節'),但我認爲原因是'int'可以轉換爲'字節'隱式。 (http://msdn.microsoft.com/en-us/library/5bdb6693%28v=vs.100%29.aspx)。 –