Utilisation de la réflexion dans .NET Y a-t-il un moyen de renvoyer le type réel comme une chaîne. (Dans ce cas, "DateTime" ou "System.DateTime") P>
Je comprends que typeof (DateTime?). Nom code> retourne "Nullable`1". P>
DateTime? code> est
nullable
3 Réponses :
Comme indiqué par Patryk: P>
typeof (DateTime?). GetGenericarguments () [0] Nom Code> P>
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 code> 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.
Il y a un utilisation: p> é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: p> et c'est un nom terrible em> 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!) p> puis comme une méthode d'extension, votre utilisation peut être comme: p> ou < / p> NULLABLABLE.GETUDERLYDYPE CODE>
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:
String String String gettypename (ce type de type) code> pour la méthode d'extension!
chris sinclair em> fonctionne de code mais je l'ai réécrit plus concis. puis utilisez-le: p> GetNullableUnderlyingTypeIfNullable(typeof(DateTime?)).Name
Le type actuel est
nullable code>
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] code>, si i> est un type générique tous Temps, sinon, vous devez le vérifier.