如果兩個操作數具有不同的數據類型,則算術表達式的結果將是更精確的數據類型。
由於UInt64.MaxValue
大於Int32.MaxValue
添加UInt64
值到Int32
值產生一個Decimal
(參見:Widening and Narrowing Conversions)不是Int32
哪個範圍太小相比UInt64
。結果也可能是負面的,所以UInt64
也不是一個好的選擇。實際上沒有從UInt64
到其他任何整數類型的隱式轉換,甚至沒有Int64
(Long
),因爲它的範圍較小。
這就是爲什麼如果您嘗試將結果重新分配給UInt64
vaue時出現編譯器錯誤的原因。
要麼你要投它:
myULong = CULng(myULong + 1)
或(更好)首先使用1UL
:
myULong += 1UL
MSDN:
類型不安全的轉換,原因一個帶有Option Strict的編譯器錯誤 On。例如,如果嘗試將Integer變量添加到雙變量 變量並將該值賦給Integer變量,則會產生編譯器錯誤 結果,因爲Double變量不能隱式轉換爲 類型Integer。
順便說一句,C#會自動使用正確的類型,所以這個編譯:
UInt64 myULong = 1;
myULong += 1; // here 1 is treated as UInt64
,而這不會編譯
myULong += -1; // -1 is Int32
歷史,Visual Basic中有很多它。你將不得不在這裏使用'1UL'。 – 2014-08-30 21:39:12
你應該使用文字來表示適當的數據類型,1UL,我總是在每一個數學運算或變量聲明中做到這一點,即使對於整數,數字文字也是一種實用的自定義編碼。 – ElektroStudios 2014-08-31 02:01:54
再一次'Option Strict On'節省了一天的時間。 – 2014-08-31 13:35:37