分配给委托时返回值和签名一致性 -- 函数<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() );

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

相关内容

  • 没有找到相关文章

最新更新