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
Barbara StreisandOriginal
2025-01-18 16:41:091018Durchsuche

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>

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!

Stellungnahme:
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