如何在C#中的属性或const上访问Description属性?

Met*_*urf 18 .net c# attributes

如何访问const或属性上的Description属性,即

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;

}
Run Code Online (Sandbox Code Playgroud)

要么

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; } 
    }

}
Run Code Online (Sandbox Code Playgroud)

在调用类中,我想访问Description属性,即

int x = Group.UserExistsInGroup;
string description = Group.UserExistsInGroup.GetDescription(); // or similar
Run Code Online (Sandbox Code Playgroud)

我也对其他方法的想法持开放态度.

编辑: 我应该提到我已经看到这里提供的示例: 自动实现的属性是否支持属性?

但是,我正在寻找一种方法来访问description属性,而不必在属性类型中输入字符串文字,即,我宁愿不这样做:

typeof(Group).GetProperty("UserExistsInGroup");
Run Code Online (Sandbox Code Playgroud)

类似于扩展方法的东西; 类似于以下方法,它将通过扩展方法返回Enum上的Description属性:

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";
    }
}
Run Code Online (Sandbox Code Playgroud)

Jar*_*Par 23

请尝试以下方法

var property = typeof(Group).GetProperty("UserExistsInGroup");
var attribute = property.GetCustomAttributes(typeof(DescriptionAttribute), true)[0];
var description = (DescriptionAttribute)attribute;
var text = description.Description;
Run Code Online (Sandbox Code Playgroud)


And*_*ndy 5

您可以调用MemberInfo.GetCustomAttributes()以获取在的成员上定义的任何自定义属性Type。您可以MemberInfo通过执行以下操作来获取该属性的:

PropertyInfo prop = typeof(Group).GetProperty("UserExistsInGroup",
    BindingFlags.Public | BindingFlags.Static);
Run Code Online (Sandbox Code Playgroud)