C#将值为int.MaxValue的两个变量相乘不会导致OverflowException

Jon*_*hay 3 c# int

我有一个包含两个值的整数数组,每个值都是int32的最大值:

int[] factors = new int[] { 2147483647, 2147483647 };
Run Code Online (Sandbox Code Playgroud)

我正在尝试获取这两个数字的乘积来创建OverflowException:

try
{
    int product = factors[0] * factors [1];
}
catch(Exception ex)
{
}
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是(并且令人沮丧),产品实际上返回值1.为什么这样,当两个整数的乘积超过int.MaxValue时,我将如何抛出异常?

Céd*_*non 8

因为C#的默认行为不是用int检查溢出.但是,您可以使用checked关键字强制进行溢出检查.

try
{
    checked
    {
        int product = factors[0] * factors [1];
    }
}
catch(Exception ex)
{
}
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的 - 请注意,编译器上还有一个"默认使用已检查"选项. (2认同)