


Warum kann C# keine generischen Typen mit Schnittstelleneinschränkungen ableiten?
Einschränkungen der generischen C#-Typinferenz
Warum kann C# in diesem Fall nicht auf den generischen Typ schließen?
Bei der Verwendung generischer Methoden identifiziert die C#-Typinferenz normalerweise die richtigen generischen Parameter. In einigen Fällen kann es jedoch fehlschlagen, sodass der Programmierer den Typ explizit angeben muss. In diesem Artikel wird eine Situation besprochen, in der ein Compiler angeblich nicht in der Lage ist, Schlussfolgerungen zu ziehen.
Bedenken Sie den folgenden Codeausschnitt:
interface IQuery<TResult> { } interface IQueryProcessor { TResult Process<TQuery, TResult>(TQuery query) where TQuery : IQuery<TResult>; } class SomeQuery : IQuery<string> { }
Wenn in einer Test
-Methode SomeQuery
mit einer Process
-Instanz als Argument aufgerufen wird, kann der Compiler nicht auf das generische Argument
class Test { void Test(IQueryProcessor p) { var query = new SomeQuery(); // 无法编译 :-( p.Process(query); // 必须显式编写所有参数 p.Process<SomeQuery, string>(query); } }
Die Frage ist, warum der Compiler in diesem Fall die generischen Parameter nicht erfolgreich ableitet?
Einschränkungen und Schlussfolgerungen
Die Antwort liegt darin, wie C# mit generischen Parameterbeschränkungen umgeht. Einschränkungen (z. B. TQuery : IQuery<TResult>
) schränken die Typen ein, die als Argumente verwendet werden können. Einschränkungen gelten jedoch nicht als Teil der Methodensignatur und können daher nicht für die Typinferenz verwendet werden.
In diesem speziellen Fall kann der Compiler feststellen, dass der query
-Parameter IQuery<TResult>
implementiert, aber er kann die Einschränkungen nicht verwenden, um auf den konkreten Typ von TResult
zu schließen. Daher sind explizite Typparameter erforderlich.
Fazit
Bei der Verwendung von Generika ist es wichtig, die Einschränkungen der C#-Typinferenz zu verstehen. Während der Compiler normalerweise ziemlich gute Arbeit beim Ableiten von Typen leistet, wird dies in einigen Fällen durch Einschränkungen verhindert. In diesem Fall müssen spezifische generische Parameter bereitgestellt werden, um den Compiler zu steuern.
Das obige ist der detaillierte Inhalt vonWarum kann C# keine generischen Typen mit Schnittstelleneinschränkungen ableiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

GULC: C -Bibliothek von Grund auf neu gebaut

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

eindeutiger Gebrauch und Phrasenfreigabe

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?
