Heim > Backend-Entwicklung > C++ > Warum schlägt die generische C#-Typinferenz aufgrund von Schnittstelleneinschränkungen fehl?

Warum schlägt die generische C#-Typinferenz aufgrund von Schnittstelleneinschränkungen fehl?

DDD
Freigeben: 2025-01-23 09:46:10
Original
988 Leute haben es durchsucht

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

Einschränkungen der generischen C#-Typinferenz

Der Typinferenzmechanismus von C# kann normalerweise die generischen Parameter generischer Methoden intelligent ableiten. Allerdings kann die Typinferenz in einigen Fällen fehlschlagen, wie im folgenden Beispiel gezeigt:

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

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

class SomeQuery : IQuery<string>
{ }</code>
Nach dem Login kopieren

Im obigen Code kann der Compiler beim Aufrufen der SomeQuery-Methode von IQueryProcessor mithilfe einer Process-Instanz nicht auf die korrekten generischen Parameter schließen. Die explizite Angabe der Parameter löst dieses Problem:

<code class="language-csharp">p.Process<SomeQuery, string>(query);</code>
Nach dem Login kopieren

Grund für fehlgeschlagene Inferenz

Entgegen anfänglichen Annahmen reichen Einschränkungen allein nicht für die Typinferenz aus. Die Typinferenz von C# basiert vollständig auf Parametern und ihren entsprechenden formalen Parametertypen. Da der bereitgestellte Parametertyp SomeQuery ist (der IQuery<string> implementiert), kann der Compiler nicht automatisch schließen, dass die generischen Parameter TQuery = SomeQuery und TResult = string sein sollten.

Eric Lippert im Artikel „Einschränkungen sind nicht Teil der Signatur“ (https://www.php.cn/link/4cf06252cc21d496e754ad7185d0617d.

Das obige ist der detaillierte Inhalt vonWarum schlägt die generische C#-Typinferenz aufgrund von Schnittstelleneinschränkungen fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage