8
votes

typeof (datetime?). Nom == Nullable`1

Utilisation de la réflexion dans .NET typeof (DateTime?). Nom retourne "Nullable`1".

Y a-t-il un moyen de renvoyer le type réel comme une chaîne. (Dans ce cas, "DateTime" ou "System.DateTime")

Je comprends que DateTime? est nullable . C'est à côté du point, je suis juste à la recherche du type de type nullable.


4 commentaires

Le type actuel est nullable


Sortez le point d'interrogation.


Gardez à l'esprit comme test C'est bon, supprimer le point d'interrogation dans le code brisera probablement quelque chose.


Si vous souhaitez choisir le nom de type générique par réflexion, dans ce cas, vous devez utiliser getgenericarguments () [0] , si est un type générique tous Temps, sinon, vous devez le vérifier.


3 Réponses :


5
votes

Comme indiqué par Patryk:

typeof (DateTime?). GetGenericarguments () [0] Nom


3 commentaires

Seul problème avec cela, est que si dans la pratique, il s'agit d'une méthode de manière générale pour obtenir le type, cela retirera également le type générique pour les types tels que la liste .


@Chrissinclair On peut simplement ajouter un chèque pour voir si le type lui-même est nullable et lancer une exception, si c'est le comportement dont vous avez besoin.


@Servy: Oh bien sûr. Je voulais juste signaler à Tchad une des mises en garde, car nous ne connaissons pas nécessairement la portée complète de son utilisation prévue; Je ne voulais pas qu'il l'étonnait plus tard sur la route.



17
votes

Il y a un NULLABLABLE.GETUDERLYDYPE Méthode qui peut vous aider dans ce cas. Probablement vous finirez par vouloir créer votre propre méthode utilitaire car (je suppose) vous utiliserez des types nullables et non nullables: xxx

utilisation: xxx


édition: je soupçonne que vous pouvez également utiliser d'autres mécanismes sur le type, auquel cas vous pouvez la modifier légèrement pour obtenir le type sous-jacent ou utiliser le type existant s'il est non -Anlable: xxx

et c'est un nom terrible pour une méthode, mais je ne suis pas assez intelligent pour trouver un (i ' Je serais heureux de le changer si quelqu'un suggère un meilleur!)

puis comme une méthode d'extension, votre utilisation peut être comme: xxx

ou < / p> xxx


1 commentaires

String String String gettypename (ce type de type) pour la méthode d'extension!



4
votes

chris sinclair em> fonctionne de code mais je l'ai réécrit plus concis. xxx pré>

puis utilisez-le: p>

GetNullableUnderlyingTypeIfNullable(typeof(DateTime?)).Name


0 commentaires