Cyb*_*ist 33 c# windows-phone-7
无论如何,这有什么用呢?我做了一个简单的乘法:
Int64 x = 11111111111;
Int64 y = 11111111111;
Int64 z = x * y;
Run Code Online (Sandbox Code Playgroud)
在乘法结束时,z显示的值为:
-5670418394979206991
这显然已经溢出,但没有例外.我想要一个人成长,但......
请注意,这是在Windows Phone 7上,但我认为这与此问题无关.或者是吗?
Mar*_*ers 43
您可以使用其他答案已经指出的已检查块:
checked
{
long x = 11111111111;
long y = 11111111111;
long z = checked(x * y);
// ...
}
Run Code Online (Sandbox Code Playgroud)
这导致异常:
OverflowException:算术运算导致溢出.
如果您只是在需要检查的单个操作中,则可以使用选中的表达式:
long x = 11111111111;
long y = 11111111111;
long z = checked(x * y);
Run Code Online (Sandbox Code Playgroud)
您还可以设置/ checked编译器选项以选中默认值.
要在Visual Studio开发环境中设置此编译器选项:
- 打开项目的" 属性页"对话框.有关详细信息,请参阅设置Visual C#项目属性.
- 单击" 配置属性"文件夹.
- 单击Build属性页面.
- 修改" 检查算术溢出/下溢"属性.
如果将默认值更改为已选中,则可以使用未选中的块或表达式再次获取未选中的行为.
Dar*_*rov 26
检查一下:
checked
{
Int64 x = 11111111111;
Int64 y = 11111111111;
Int64 z = x * y;
}
Run Code Online (Sandbox Code Playgroud)
尝试:
checked
{
Int64 x = 11111111111;
Int64 y = 11111111111;
Int64 z = x * y;
}
Run Code Online (Sandbox Code Playgroud)
编译器假定您希望以这种方式执行并继续执行溢出.如果需要将溢出视为操作的异常,请将操作包装起来checked,它将在运行时抛出异常.
checked
{
Int64 x = 11111111111;
Int64 y = 11111111111;
Int64 z = x * y;
}
Run Code Online (Sandbox Code Playgroud)
System.OverflowException:抛出了System.OverflowException类型的异常.