3 回答
TA贡献1880条经验 获得超4个赞
默认情况下,C#整数运算不会在溢出时引发异常。您可以通过项目设置或进行以下计算来实现checked:
int result = checked(largeInt + otherLargeInt);
现在该操作将抛出。
相反的是unchecked,这使得任何操作都被显式取消。显然,这仅在项目设置中启用了选中的操作时才有意义。
TA贡献1811条经验 获得超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 关注
- 420 浏览
添加回答
举报