Heim > Backend-Entwicklung > C++ > Warum schlägt die Listeninitialisierung mit einem generischen offenen Typ in C# fehl?

Warum schlägt die Listeninitialisierung mit einem generischen offenen Typ in C# fehl?

DDD
Freigeben: 2025-01-11 06:00:42
Original
278 Leute haben es durchsucht

Why Does List Initialization Fail with a Generic Open Type in C#?

C# Generic Open Type List-Initialisierungsfehler: Eine Lösung

Bei der Arbeit mit generischen offenen Typen wie Data<T> und ihren geschlossenen konstruierten Typen (z. B. StringData, DecimalData) führt der Versuch, eine Liste mit List<Data> zu erstellen, zu einem Compilerfehler: „Der generische Typ wird verwendet.“ „Daten“ erfordert Argumente vom Typ 1.“ Dies liegt daran, dass C# den Diamantoperator für offene generische Typen nicht unterstützt. Es ist immer ein konkretes Typargument erforderlich.

Das Problem erklärt

Der Compiler muss den spezifischen Typ innerhalb der Data<T>-Klasse kennen, um eine Liste zu erstellen. List<Data> ist mehrdeutig; Es wird nicht angegeben, welchen Typ T darstellt.

Effektive Lösungen

Hier sind zwei praktische Ansätze, um dieses Problem zu lösen:

  1. Schnittstellenimplementierung: Erstellen Sie eine Schnittstelle (z. B. IData), die Data<T> und ihre abgeleiteten Typen implementieren. Dann deklarieren Sie Ihre Liste als List<IData>. Dadurch wird Polymorphismus genutzt, sodass Sie Instanzen verschiedener Data<T>-Typen in derselben Liste speichern können.

  2. Abstrakte Basisklasse: Definieren Sie eine abstrakte Basisklasse (z. B. DataBase) für Data<T>. Leiten Sie Ihre konkreten Typen von dieser Basisklasse ab. Anschließend können Sie eine Liste mit List<DataBase> erstellen. Dies sorgt für eine starke Typisierung, jedoch mit weniger Generizität im Vergleich zum Schnittstellenansatz.

Überlegungen

Beide Methoden bringen eine gewisse Designkomplexität mit sich. Die Wahl hängt von den spezifischen Anforderungen Ihrer Anwendung ab. Schnittstellen bieten eine größere Flexibilität, während abstrakte Basisklassen einen strukturierteren Ansatz bieten.

Weiterführende Literatur

Für ein tieferes Verständnis von Generika, Varianz und Polymorphismus in C# lesen Sie diese Ressourcen:

Das obige ist der detaillierte Inhalt vonWarum schlägt die Listeninitialisierung mit einem generischen offenen Typ in C# 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