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<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?List<Metadata<object>>
macht den Trick.struct
Einschränkung hat, funktioniert es hier nicht. SieheMetaData
Referenztypen anstelle Ihrer ursprünglichen Werttypen ohne Informationen (Kompilierungszeit) über den zugrunde liegenden Werttyp jedes Elements, was effektiv "Boxen" bedeutet.Antworten:
quelle
List<object>
? Bitte schauen Sie sich meinen Kommentar unter der Frage von OP an.Warum nicht nach Leppies Antwort
MetaData
eine Schnittstelle erstellen:quelle
Ich habe auch eine nicht generische Version mit dem
new
Schlüsselwort verwendet:Die explizite Schnittstellenimplementierung ermöglicht beide
Data
Mitglieder:Sie können eine Version ableiten, die auf Werttypen abzielt:
Dies kann auf jede Art von allgemeinen Einschränkungen erweitert werden.
quelle
DataType
undobject Data
viel geholfen hat)Deserialize<metadata.DataType>(metadata.Data);
. Es sagt mir , dass Symbolmetadaten nicht aufgelöst werden können . Wie rufe ich den Datentyp ab, um ihn für eine generische Methode zu verwenden?