La méthode GetCustomAttributes de la classe System.Reflection.MemberInfo est-elle buggée ?

Si vous avez déjà fait de la Reflection alors vous connaissez surement la méthode GetCustomAttributes(bool inherit) de la classe MemberInfo qui permet de retrouver la liste des attributs d’un membre d’un type.

Comme vous vous en doutez le paramètre booléen inherit permet d’indiquer au framework s’il doit rechercher également dans les types de base (du style vous avez une propriété abstraite avec des attributs dans la classe de base, et cette propriété est « overridée » dans une classe fille).

Vous écrivez le code d’appel à la méthode GetCustomAttributes, vous exécutez et vous remarquez que l’attribut de la classe de base n’est pas trouvé.

Un petit tour sur la msdn : http://msdn.microsoft.com/en-us/library/kff8s254.aspx

D’après la msdn voici à quoi sert le paramètre booléen inherit :
image

C’est donc bien ce que nous avions compris… le booléen permet d’indiquer que l’on veut également récupérer les attributs du membre des types de base.

L’exemple donné sur la msdn confirme bien l’utilisation de ce paramètre :


image

Là je me pose la question : c’est quoi l’arnaque ? Qu’est-ce que j’ai pu louper dans l’utilisation de cette méthode ?

Comme d’habitude, qui vient à mon secours dans ces moments là ? Reflector!

Et là c’est l’hallu… Je vous laisse en juger par vous même :
clip_image001

Eh oui vous voyez comme moi, le paramètre bool inherit n’est pas utilisé… en fait ici il ne sert à rien…

Certains diront que c’est un bug. Moi je préfère dire que ce n’en ai pas un, que c’est juste une méthode qui n’est pas tout à fait terminée… chez moi j’appelle ça un bug normal, mais peu importe.

Heureusement il y a toujours une solution !! Il suffit d’utiliser la méthode statique System.Attribute.GetCustomAttributes(MemberInfo m, bool inherit).

Comme vous pouvez le voir ci-dessous celle-ci fait bien ce qu’on lui demande de faire :
clip_image005

Ce genre d’oubli me rassure tout de même, car je me dis que finalement ce sont des hommes comme vous et moi qui codent le Framework.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s