Die Herausforderung besteht darin, eine C#-Liste zu erstellen, die mehrere generische Typen mit unterschiedlichen Typparametern in derselben Liste enthalten kann. Stellen Sie sich eine Metadata<T>
-Klasse vor, die auf Werttypen beschränkt ist. Ziel ist es, eine Liste zu erstellen, die Metadata<int>
-, Metadata<bool>
- und Metadata<double>
-Objekte gleichzeitig speichern kann.
Die direkte Verwendung einer Liste von Metadata<T>
ist nicht möglich, da T
ein einzelner, konkreter Typ sein muss. Eine Lösung mittels Vererbung bietet jedoch einen praktischen Ansatz.
Lösung mittels Vererbung:
Dieser Ansatz führt eine abstrakte Basisklasse Metadata
ein und leitet daraus spezialisierte Klassen wie Metadata<T>
ab.
public abstract class Metadata { } public class Metadata<T> : Metadata where T : struct { private T mDataType; // ... other members ... }
Jetzt kann eine Liste der abstrakten Basisklasse Metadata
erstellt werden:
List<Metadata> metadataObjects = new List<Metadata>();
Diese Liste kann nun Instanzen verschiedener Metadata<T>
Typen aufnehmen:
metadataObjects.Add(new Metadata<int>()); metadataObjects.Add(new Metadata<bool>()); metadataObjects.Add(new Metadata<double>());
Dies löst das Problem auf elegante Weise, indem ein gemeinsamer Typ (Metadata
) für die Liste bereitgestellt wird und gleichzeitig typspezifische Implementierungen durch Vererbung ermöglicht werden. Der Zugriff auf das spezifische T
in jedem Objekt würde eine Rückumwandlung in den entsprechenden Metadata<T>
-Typ erfordern. Dies ist ein häufiges Muster beim Umgang mit Polymorphismus und generischen Typen in C#.
Das obige ist der detaillierte Inhalt vonKann eine C#-Liste mehrere generische Typen mit unterschiedlichen Typparametern enthalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!