gpt4 book ai didi

c# - 分配给 void 委托(delegate)的 lambda 是否丢弃 C# 中的非 void 返回类型?

转载 作者:行者123 更新时间:2023-11-30 14:49:27 25 4
gpt4 key购买 nike

我可以从分配给 Action(需要 void 返回类型)的 lambda 中调用非 void 函数:

static bool foo() { return true; }
...
// Action action = foo; // This gives a compile error though.
Action action = ()=>foo(); // This compiles

最初我在查看 List.ForEach() 示例时注意到了这一点。我可以从 lambda 执行一个非空函数并编译它。

起初这似乎违反直觉,让我认为您可以将非 void 函数分配给 void 委托(delegate)(void 就像一种逆变),但是 Action action = foo; 无效。

所以现在我假设发生的事情是 lambda 变为 void 因为这是预期的返回类型,所以它丢弃它调用的非 void 函数的返回类型。对吗?

最佳答案

你的例子

Action action = ()=>foo();

就像任何其他方法一样:

public void MyTestMethod()
{
// do something
foo();
// do some more
}

这在 C# 中是完全合法的(尽管一些静态分析器会警告您不要使用 foo() 的返回值)。

第二个例子:

action = foo;

不起作用,因为 foo本身是具有返回类型的方法,因此只能分配给类型为 Func<bool> 的变量, 但不是 Action . λ () => foo()另一方面没有返回类型并且是有效的 Action .

关于c# - 分配给 void 委托(delegate)的 lambda 是否丢弃 C# 中的非 void 返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38694792/

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