表达身体的成员奇怪的情况

Art*_*roO 1 c#

我试着围绕表达身体成员特征的概念.

我在互联网上找到的基本示例非常清楚,但我遇到了这段特定的代码,我不知道它究竟意味着什么:

Assert.Throws<DivideByZeroException>(() => calculator.Divide(5, 0));
Run Code Online (Sandbox Code Playgroud)

上面的例子来自一本关于TDD技术的书,这就是你可以看到Assert类的原因.应该抛出Divide方法DivideByZeroException,现在我们正在测试它.

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

有人能解释那里究竟发生了什么吗?Divide函数的结果将体现为空括号?

Eri*_*ert 7

本身并不是表达身体的成员.这是一个lambda表达式.Lambda被添加到C#3; 表达体成员特征在很晚之后添加,其设计看起来像lambda语法.

你可以想到

Assert.Throws<DivideByZeroException>(() => calculator.Divide(5, 0));
Run Code Online (Sandbox Code Playgroud)

就像

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

这会让它更清楚吗?

简而言之:Assert.Throws接受一个函数,它调用函数,并验证函数是否抛出异常.它需要一个可以调用函数是至关重要的.你不能只说

Assert.Throws<Whatever>(calculator.Divide(5, 0))
Run Code Online (Sandbox Code Playgroud)

因为那之前 Throws的召唤被召唤!