3 回答

TA貢獻1862條經驗 獲得超7個贊
默認情況下,C#整數運算不會在溢出時引發異常。您可以通過項目設置或進行以下計算來實現checked:
int result = checked(largeInt + otherLargeInt);
現在該操作將拋出。
相反的是unchecked,這使得任何操作都被顯式取消。顯然,這僅在項目設置中啟用了選中的操作時才有意義。

TA貢獻1808條經驗 獲得超4個贊
在C#中,OverflowException不會引發(在VB中,默認情況下會引發異常)。
為了獲得排他性,您必須將代碼嵌入checked上下文中:
byte value = 241;
checked
{
try
{
sbyte newValue = (sbyte) value;
Console.WriteLine("Converted the {0} value {1} to the {2} value {3}.",
value.GetType().Name, value,
newValue.GetType().Name, newValue);
}
catch (OverflowException)
{
Console.WriteLine("Exception: {0} > {1}.", value, SByte.MaxValue);
}
}
MSDN更詳細地解釋:
為了使算術,轉換或轉換操作拋出OverflowException,該操作必須在檢查的上下文中發生。默認情況下,將檢查Visual Basic中的算術運算和溢出。在C#中,它們不是。如果操作發生在未經檢查的上下文中,則結果將被舍棄,方法是丟棄所有不適合目標類型的高階位。
- 3 回答
- 0 關注
- 919 瀏覽
添加回答
舉報