簡體   English   中英

分配給委托時的返回值和簽名歧義——Func<Task> VS 動作

[英]Return value and signature abiguity when assigning to delegates -- Func<Task> vs Action

我驚訝地發現,在將方法傳遞給另一個方法時,方法的返回類型會造成重載歧義。 由於返回類型不是簽名的一部分,因此很難看出更改返回值會如何在以前不存在的地方產生歧義。 然而,這似乎是 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() );

在這種情況下,編譯器將正確推導出重載。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM