Heim > Backend-Entwicklung > C++ > Wie kann ich in C# mehrere generische Typen in einer einzigen Liste speichern?

Wie kann ich in C# mehrere generische Typen in einer einzigen Liste speichern?

Barbara Streisand
Freigeben: 2025-01-18 16:41:09
Original
938 Leute haben es durchsucht

How Can I Store Multiple Generic Types in a Single List in C#?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage