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.
<code class="language-csharp">public abstract class Metadata { } public class Metadata<T> : Metadata where T : struct { private T mDataType; // ... other members ... }</code>
Jetzt kann eine Liste der abstrakten Basisklasse Metadata
erstellt werden:
<code class="language-csharp">List<Metadata> metadataObjects = new List<Metadata>();</code>
Diese Liste kann nun Instanzen verschiedener Metadata<T>
Typen aufnehmen:
<code class="language-csharp">metadataObjects.Add(new Metadata<int>()); metadataObjects.Add(new Metadata<bool>()); metadataObjects.Add(new Metadata<double>());</code>
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!