8

通过 NUnit 运行以下 C# 代码会产生

Test.ControllerTest.TestSanity: Expected: `<System.DivideByZeroException>` But was:  null

所以要么没有 DivideByZeroException 被抛出,要么 NUnit 没有捕捉到它。类似于这个问题,但他得到的答案似乎对我不起作用。这是使用 NUnit 2.5.5.10112 和 .NET 4.0.30319。

    [Test]
    public void TestSanity()
    {
        Assert.Throws<DivideByZeroException>(new TestDelegate(() => DivideByZero()));
    }

    private void DivideByZero()
    {
        // Parse "0" to make sure to get an error at run time, not compile time.
        var a = (1 / Double.Parse("0"));
    }

有任何想法吗?

4

2 回答 2

21

不会抛出异常。1 / 0.0 只会给你 double.PositiveInfinity。这是 IEEE 754 标准所规定的,C#(以及基本上所有其他系统)都遵循该标准。

如果您想在浮点除法代码中出现异常,请明确检查零,然后自己抛出。如果你只是想看看 DivideByZeroException 会给你带来什么,要么手动抛出它,要么将整数除以整数零。

于 2010-05-31T19:46:14.520 回答
7

来自MSDN

尝试将整数或十进制值除以零时引发的异常。

您处理的double,不是任何整数类型(int等)或decimal. 即使在上下文中double,也不会在这里抛出异常。checked你只是得到+INF。

如果您想评估为积分数学(并获得例外),请使用:

var a = (1 / int.Parse("0"));
于 2010-05-31T19:48:45.140 回答