繁体   English   中英

身体强壮的成员奇怪的情况

[英]Expression-bodied members strange case

我试着将表情浓郁的成员特征的概念包扎起来。

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

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

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

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

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

本身不是一个表情强健的成员。 那是一个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被调用之前就 Throws

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM