簡體   English   中英

方差無效:type參數必須是無變量有效的,但是是協變的

[英]Invalid variance: The type parameter must be invariantly valid but is covariant

這有什么問題?

// does not compile
interface IRepository<out T>
{
    Task<T> Get(int id);
}

編譯器抱怨:

Invalid variance: The type parameter 'T' must be invariantly valid on ... 'T' is covariant.

但是,當我刪除任務時,代碼編譯:

// compiles
interface IRepository<out T>
{
    T Get(int id);
}

為什么要使接口異步導致它不能編譯?

正如上面提到的Asad, Task<T>不能協變,因為它是一個 MSDN聲明:

只有接口類型委托類型可以具有變體類型參數。

如果只有一個協變的ITask<T> 接口

經過一些谷歌搜索后,我在visualstudio.uservoice.com上找到了這個建議。 在評論中,Jeffrey Morse鏈接到他ITask<T>

干得好傑夫!

暫無
暫無

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

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