gpt4 book ai didi

c# - 表情型成员奇怪的案例

转载 作者:太空宇宙 更新时间:2023-11-03 18:21:42 25 4
gpt4 key购买 nike

我试着围绕表达体成员功能的概念进行思考。

我在网上找到的基本例子很清楚,但是我遇到了这段具体的代码,我不知道它到底是什么意思:

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

上面的例子来自一本关于TDD技术的书,所以你可以看到Assert类。 Divide 方法应该抛出 DivideByZeroException,现在我们正在对此进行测试。

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

有人能解释一下到底发生了什么吗? Divide 函数的结果会包含空括号吗?

最佳答案

本身 这不是表达式体成员。那是一个lambda 表达式。 Lambda 被添加到 C# 3; expression-bodied 成员特性是后来添加的,被设计成看起来像 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 被调用之前抛出!

关于c# - 表情型成员奇怪的案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51545527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com