GetCustomAttribute retourne null
Quelqu'un peut-il m'expliquer pourquoi Value.GetType().GetCustomAttribute
retourne null
? J'ai regardé une dizaine de tutoriels sur la façon d'obtenir les attributs d'un type énuméré membre. N'importe qui GetCustomAttribute*
méthode que j'utilise, je n'ai pas d'attributs personnalisés retourné.
using System;
using System.ComponentModel;
using System.Reflection;
public enum Foo
{
[Bar(Name = "Bar")]
Baz,
}
[AttributeUsage(AttributeTargets.Field)]
public class BarAttribute : Attribute
{
public string Name;
}
public static class FooExtensions
{
public static string Name(this Foo Value)
{
return Value.GetType().GetCustomAttribute<BarAttribute>(true).Name;
}
}
- Peut-être que je devrais reformuler ma question. Je comprends pourquoi
NullReferenceException
est levée. Ce que je ne comprends pas, c'est pourquoiValue.GetType().GetCustomAttribute
retournenull
.
Vous devez vous connecter pour publier un commentaire.
Parce que l'attribut que vous essayez de récupérer n'a pas été appliquée à ce type; elle a été appliquée sur le terrain.
Par conséquent, plutôt que d'appeler GetCustomAttributes sur le type d'objet, vous devez appeler l'objet FieldInfo. En d'autres termes, vous aurez besoin de faire quelque chose de plus comme ceci:
phoog explication du problème, c'est correct. Si vous voulez un exemple de comment récupérer l'attribut sur une valeur d'enum, découvrez cette réponse.
votre attribut est au niveau du terrain, tandis que
Value.GetType().GetCustomAttribute<BarAttribute>(true).Name
serait de retour attribut appliqué enum TotoJ'ai fini par réécrire comme ceci:
Je pense que vous devez réécrire FooExtension comme ceci: