首頁 > 後端開發 > C++ > 為什麼 C# 泛型類型推斷因介面約束而失敗?

為什麼 C# 泛型類型推斷因介面約束而失敗?

DDD
發布: 2025-01-23 09:46:10
原創
988 人瀏覽過

Why Does C# Generic Type Inference Fail with Interface Constraints?

C#泛型類型推論的限制

C#的型別推論機制通常能夠智慧地推論出泛型方法的泛型參數。然而,在某些情況下,類型推論可能會失敗,如下例所示:

<code class="language-csharp">interface IQuery<TResult> { }

interface IQueryProcessor
{
    TResult Process<TQuery, TResult>(TQuery query)
        where TQuery : IQuery<TResult>;
}

class SomeQuery : IQuery<string>
{ }</code>
登入後複製

在上面的程式碼中,當使用SomeQuery實例呼叫IQueryProcessorProcess方法時,編譯器無法推斷出正確的泛型參數。明確指定參數可以解決這個問題:

<code class="language-csharp">p.Process<SomeQuery, string>(query);</code>
登入後複製

推論失敗的原因

與最初的設想相反,僅靠約束不足以進行類型推論。 C#的類型推論完全基於參數及其對應的形式參數類型。由於提供的參數類型是SomeQuery(它實現了IQuery<string>),編譯器無法自動推斷泛型參數應為TQuery = SomeQueryTResult = string

Eric Lippert在文章「約束不是簽名的一部分」(https://www.php.cn/link/4cf06252cc21d496e754ad7185d0617d

以上是為什麼 C# 泛型類型推斷因介面約束而失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板