Ce n'est probablement pas possible, mais j'ai cette classe:
public class Metadata<DataType> where DataType : struct
{
private DataType mDataType;
}
Il y a plus à cela, mais gardons les choses simples. Le type générique (DataType) est limité aux types valeur par l'instruction where. Ce que je veux faire, c'est avoir une liste de ces objets de métadonnées de différents types (DataType). Tel que:
List<Metadata> metadataObjects;
metadataObjects.Add(new Metadata<int>());
metadataObjects.Add(new Metadata<bool>());
metadataObjects.Add(new Metadata<double>());
Est-ce seulement possible?
List<object>
? Ils n'arrêteront pas de boxer / déballer, ils ne supprimeront pas le besoin de casting, et finalement, vous obtenez unMetadata
objet qui ne vous dit rien sur le réelDataType
, je cherchais une solution pour résoudre ces problèmes. Si vous allez déclarer une interface / classe, juste pour pouvoir mettre le type générique d'implémentation / dérivé dans une liste générique, en quoi cela diffère -t-il de l'utilisation d'unList<object>
autre que d'avoir une couche vide de sens?List<Metadata<object>>
fait l'affaire.struct
contrainte, cela ne fonctionne pas ici. VoirMetaData
types de référence au lieu de vos types de valeur d'origine sans aucune information (au moment de la compilation) sur le type de valeur sous-jacent de chaque élément, c'est effectivement "boxing".Réponses:
la source
List<object>
? s'il vous plaît regarder mon commentaire publié sous la question d'OP.Suite à la réponse de Leppie, pourquoi ne pas créer
MetaData
une interface:la source
J'ai également utilisé une version non générique, en utilisant le
new
mot - clé:L'implémentation d'interface explicite est utilisée pour permettre aux deux
Data
membres:Vous pouvez dériver une version ciblant les types de valeur:
Cela peut être étendu à tout type de contraintes génériques.
la source
DataType
et que vous avezobject Data
beaucoup aidé)Deserialize<metadata.DataType>(metadata.Data);
. Cela me dit que je ne peux pas résoudre les métadonnées des symboles . Comment récupérer le DataType pour l'utiliser pour une méthode générique?