7
votes

Obtenez le type (t) d'une nullable au moment de l'exécution?

Je ne sais pas vraiment quoi ajouter au titre, j'aimerais obtenir le type (t) d'une nullable. Par exemple, j'ai reçu un objet dont le type est nullable et je voudrais obtenir quelque chose comme "System.int32" (le type de cours, pas la chaîne)


4 commentaires

Je crois que c'est une dupe mais que vous ne pouvez pas le trouver, mais vous recherchez NULLLABLE.GETUDERLYINGTYPE . Pourrait être Stackoverflow.com/Questions/5174423/... ou Stackoverflow.com/questions/5181494/...


blog.dotnetclr. com / archive / 2008/03 / 11 / ...


La question est ambiguë. Avez-vous un objet de type représentant un type de valeur nullable et vous souhaitez connaître le type de valeur sous-jacente? Ou avez-vous une instance d'un objet de type valeur nullable et que vous souhaitez connaître le type de valeur sous-jacente? Les réponses à ces deux questions sont complètement différentes. Dans le premier cas, vous pouvez utiliser BeUnderlyingType. Dans le second cas, l'instance d'objet est en boîte ou non. S'il est en boîte, alors il n'est pas de type nullable . Il n'y a pas de type de valeur nullable en boîte. Si ce n'est pas en boîte, alors vous connaissez déjà son type .


J'ai eu un type représentant l'objet. Pour une instance, je devrais utiliser Activator.createInstance qui pourrait être possible, mais un peu inutile imo, car je peux obtenir ce que je veux du type!


6 Réponses :



0
votes

Une nullable est une construction générique, vous devez donc l'obtenir des généricarguments du type, comme celui-ci: typeof (t) .gegenericarguments () [0]


0 commentaires

0
votes
System.Nullable.GetUnderlyingType(typeof(Nullable<int>));

1 commentaires

Cela lancera NullReferenceException si Myint est actuellement null.



0
votes

Avertissement: code horrible, pas de chèques, juste un exemple, etc: xxx


0 commentaires

2
votes

Cette méthode devrait faire l'affaire: xxx


0 commentaires

1
votes

Utiliser gettype () Il fonctionne comme (ONU) attendu.

if (typeof(int?) == typeof(int))
    MessageBox.Show("It works with definitions");
if (new Nullable<int>(2).GetType() == typeof(int))
    MessageBox.Show("It works with instances!");


0 commentaires