身体强壮的成员情况奇怪

时间:2018-07-26 18:36:56

标签: c#

我试图围绕表达有力的成员特征的概念进行讨论。

我在互联网上找到的基本示例非常清楚,但是我遇到了这段特定的代码,我不知道它的确切含义:

Assert.Throws<DivideByZeroException>(() => calculator.Divide(5, 0));

上面的示例来自一本有关TDD技术的书,这就是为什么您可以看到Assert类的原因。 Divide方法应该抛出DivideByZeroException,现在我们对此进行测试。

令人困惑的部分是() => calculator.Divide(5, 0)

有人可以解释一下那里到底发生了什么吗? Divide函数的结果将包含空括号吗?

1 个答案:

答案 0 :(得分:7)

这本身不是表达强壮的成员本身。这是一个 lambda表达式。 Lambda已添加到C#3;表达式主体成员功能在以后添加,并且设计为类似于lambda语法。

你会想到的

Assert.Throws<DivideByZeroException>(() => calculator.Divide(5, 0));

class Whatever 
{
  static double SomeFunction() => calculator.Divide(5, 0);
  ...
     ... later
     Func<double> f = SomeFunction;
     Assert.Throws<DivideByZeroException>(f);

这是否更清楚?

简而言之:Assert.Throws接受一个函数,它调用该函数,并验证该函数引发了异常 。至关重要的是,它必须具有可以被称为的函数。你不能只是说

Assert.Throws<Whatever>(calculator.Divide(5, 0))

因为在之前 Throws被抛出!