[英]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.