Dies ist wahrscheinlich nicht möglich, aber ich habe diese Klasse:
public class Metadata<DataType> where DataType : struct
{
private DataType mDataType;
}
Es steckt noch mehr dahinter, aber lassen Sie es uns einfach halten. Der generische Typ (DataType) ist durch die where-Anweisung auf Werttypen beschränkt. Ich möchte eine Liste dieser Metadatenobjekte unterschiedlichen Typs (Datentyp) haben. Sowie:
List<Metadata> metadataObjects;
metadataObjects.Add(new Metadata<int>());
metadataObjects.Add(new Metadata<bool>());
metadataObjects.Add(new Metadata<double>());
Ist das überhaupt möglich?
List<Metadata<object>>
macht den Trick.
MetaData
Referenztypen anstelle Ihrer ursprünglichen Werttypen ohne Informationen (Kompilierungszeit) über den zugrunde liegenden Werttyp jedes Elements, was effektiv "Boxen" bedeutet.
List<object>
? Sie werden nicht aufhören zu boxen / entpacken, sie werden die Notwendigkeit des Castings nicht beseitigen, und letztendlich erhalten Sie einMetadata
Objekt, das Ihnen nichts über das tatsächliche sagt.DataType
Ich habe nach einer Lösung gesucht, um diese Probleme anzugehen. Wenn Sie eine Schnittstelle / Klasse deklarieren möchten, nur um den implementierenden / abgeleiteten generischen Typ in eine generische Liste aufnehmen zu können, wie unterschiedlich ist das dann von der Verwendung einesList<object>
anderen als einer bedeutungslosen Ebene?