gpt4 book ai didi

c# - 分配给委托(delegate)时的返回值和签名歧义——Func vs Action

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

我惊讶地发现,在将方法传递给另一个方法时,方法的返回类型会产生重载歧义。由于返回类型不是签名的一部分,因此很难看出更改返回值会如何在以前不存在的地方产生歧义。然而,void 和 Task 似乎就是这种情况。考虑以下几点:

    class Signature
{
static public void Overload(Func<Task> countasync)
{
}
static public void Overload(Action count)
{
}
}

void Decrement() { }
Task IncrementAsync() { return Task.CompletedTask; }

void TestSig()
{
Signature.Overload(this.IncrementAsync); // no compile time error
Signature.Overload(this.Decrement); // compile time error: this call is ambiguous
}

有没有一种方法可以定义 Overload 参数类型,以便第二次调用不会产生歧义,同时仍允许第一次调用?

最佳答案

不,没有办法修复重载决议。

但是,您可以以稍微丑陋的调用站点代码为代价来消除歧义:

Signature.Overload( () => this.Decrement() );

在这种情况下,编译器将正确地推断出重载。

关于c# - 分配给委托(delegate)时的返回值和签名歧义——Func<Task> vs Action,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42184136/

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