Comment accéder à l'attribut Description sur une propriété ou une const en C #?
Comment accédez-vous à la Description de la propriété sur un const ou une propriété, c'est à dire,
public static class Group
{
[Description( "Specified parent-child relationship already exists." )]
public const int ParentChildRelationshipExists = 1;
[Description( "User is already a member of the group." )]
public const int UserExistsInGroup = 2;
}
ou
public static class Group
{
[Description( "Specified parent-child relationship already exists." )]
public static int ParentChildRelationshipExists {
get { return 1; }
}
[Description( "User is already a member of the group." )]
public static int UserExistsInGroup {
get { return 2; }
}
}
Dans l'appel de la classe, j'aimerais accéder à la Description des biens, c'est à dire,
int x = Group.UserExistsInGroup;
string description = Group.UserExistsInGroup.GetDescription(); //or similar
Je suis ouvert à des idées à d'autres méthodes.
EDIT:
Je devrais avoir mentionné le fait que j'ai vu un exemple fourni ici:
Ne les propriétés implémentées automatiquement soutien attributs?
Cependant, je suis à la recherche d'une méthode pour accéder à la description de l'attribut sans avoir à entrer un littéral chaîne dans le type de propriété, c'est à dire, je préfère ne pas le faire:
typeof(Group).GetProperty("UserExistsInGroup");
Quelque chose le long des lignes d'une Méthode d'Extension; similaire à la méthode suivante qui sera de retour de l'attribut de Description sur un Enum via une Méthode d'Extension:
public static String GetEnumDescription( this Enum obj )
{
try
{
System.Reflection.FieldInfo fieldInfo =
obj.GetType().GetField( obj.ToString() );
object[] attribArray = fieldInfo.GetCustomAttributes( false );
if (attribArray.Length > 0)
{
var attrib = attribArray[0] as DescriptionAttribute;
if( attrib != null )
return attrib.Description;
}
return obj.ToString();
}
catch( NullReferenceException ex )
{
return "Unknown";
}
}
source d'informationauteur Metro Smurf | 2009-03-30
Vous devez vous connecter pour publier un commentaire.
Vous pouvez appeler MemberInfo.GetCustomAttributes() pour obtenir tous les attributs définis sur un membre d'un
Type
. Vous pouvez obtenir leMemberInfo
pour le bien en faisant quelque chose comme ceci:Essayez ce qui suit
Ok, j'ai vu ton edit, je ne suis pas sûr que vous pouvez le faire avec des méthodes d'extension, comme ils le seraient anaware du type de la classe conteneur.
Cela va sembler un peu farfelu, mais comment sur la création d'une nouvelle classe d'un "DescribedInt", qui aurait implicite de l'opérateur de cast pour vous permettre de l'utiliser comme un int automatiquement? Vous serez en mesure d'utiliser à peu près comment vous le décrire. Vous aurez toujours une description, mais quand vous avez besoin de l'utiliser comme un Int, vous ne besoin pour obtenir le .Les données de propriété...
par exemple:
//faire quelque chose avec des valeurs...
}
Ici est une classe d'assistance que j'utilise pour le traitement des attributs personnalisés .NET
Également des tests unitaires pour MsTest montrant comment utiliser cette classe
http://www.kozlenko.info/2010/02/02/getting-a-list-of-custom-attributes-in-net/