Listen in C# speichern mehrere generische Typen
Generische Typen in C# bieten einen leistungsstarken Mechanismus zum Erstellen von Klassen und Methoden, die mit verschiedenen Datentypen arbeiten können. Allerdings tritt häufig ein Problem auf, wenn versucht wird, mehrere generische Typen in einer Liste zu verwenden.
Betrachten Sie das folgende Beispiel:
<code class="language-csharp">public class Metadata<DataType> where DataType : struct { private DataType mDataType; } List<Metadata<DataType>> metadataObjects; //错误: DataType 未定义 metadataObjects.Add(new Metadata<int>()); metadataObjects.Add(new Metadata<bool>()); metadataObjects.Add(new Metadata<double>());</code>
Das Ziel besteht hier darin, eine Liste mit Metadatenobjekten verschiedener Datentypen zu erstellen. Allerdings beschränkt die Metadata<DataType>
-Einschränkung für die where
-Klasse den generischen Typ DataType
auf einen Werttyp. Dies bedeutet metadataObjects
, dass jedes Element in der Liste vom gleichen generischen Typ sein muss, sodass es nicht möglich ist, Objekte unterschiedlichen Typs hinzuzufügen.
Um diese Einschränkung zu überwinden, besteht eine Möglichkeit darin, eine abstrakte Basisklasse für Metadata
wie folgt einzuführen:
<code class="language-csharp">public abstract class Metadata { } // 继承抽象 Metadata 类 public class Metadata<DataType> : Metadata where DataType : struct { private DataType mDataType; }</code>
Durch die Erstellung einer abstrakten Basisklasse Metadata
kann nun eine generische Klasse Metadata<DataType>
diese Basisklasse erweitern. Dadurch können wir eine Liste von Metadata
-Objekten erstellen, wobei jedes Element einen anderen generischen Typ haben kann.
Der geänderte Code lautet wie folgt:
<code class="language-csharp">List<Metadata> metadataObjects = new List<Metadata>(); metadataObjects.Add(new Metadata<int>()); metadataObjects.Add(new Metadata<bool>()); metadataObjects.Add(new Metadata<double>());</code>
Jetzt metadataObjects
können Listen Objekte unterschiedlicher Werttypen enthalten, wodurch das Ziel, mehrere generische Typen in einer Liste zu haben, effektiv erreicht wird. Es ist zu beachten, dass beim Zugriff auf mDataType
-Attribute eine Typkonvertierung erforderlich ist, da die Metadata
-Basisklasse die spezifischen DataType
nicht kennt.
Das obige ist der detaillierte Inhalt vonWie kann ich in C# mehrere generische Typen in einer einzigen Liste speichern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!