无论如何,这是怎么回事?我做了一个简单的乘法:
Int64 x = 11111111111;
Int64 y = 11111111111;
Int64 z = x * y;
在乘法结束时,z显示的值为:
-5670418394979206991
这显然已经溢出,但没有例外。我想要一个人成长,但是......
请注意,这是在Windows Phone 7上,但我认为这与此问题无关。或者是吗?
答案 0 :(得分:43)
您可以使用其他答案已经指出的已检查块:
checked
{
long x = 11111111111;
long y = 11111111111;
long z = checked(x * y);
// ...
}
导致异常:
OverflowException:算术运算导致溢出。
如果您只是在需要检查的单一操作中,可以使用checked expression代替:
long x = 11111111111;
long y = 11111111111;
long z = checked(x * y);
您还可以将/checked compiler option设置为选中默认值。
在Visual Studio开发环境中设置此编译器选项:
- 打开项目的属性页对话框。有关详细信息,请参阅Setting Visual C# Project Properties。
- 单击配置属性文件夹。
- 点击构建属性页。
- 修改检查算术溢出/下溢属性。
醇>
如果将默认值更改为已选中,则可以使用未经检查的块或表达式再次获取未选中的行为。
答案 1 :(得分:26)
checked
{
Int64 x = 11111111111;
Int64 y = 11111111111;
Int64 z = x * y;
}
答案 2 :(得分:8)
尝试:
checked
{
Int64 x = 11111111111;
Int64 y = 11111111111;
Int64 z = x * y;
}
答案 3 :(得分:8)
编译器假设您希望以这种方式执行并继续执行溢出。如果需要将溢出视为操作的异常,请将操作包装在checked
周围,并在运行时抛出异常。
checked
{
Int64 x = 11111111111;
Int64 y = 11111111111;
Int64 z = x * y;
}
System.OverflowException:异常 类型System.OverflowException是 抛出。