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)
您可以调用MemberInfo.GetCustomAttributes()以获取在的成员上定义的任何自定义属性Type
。您可以MemberInfo
通过执行以下操作来获取该属性的:
PropertyInfo prop = typeof(Group).GetProperty("UserExistsInGroup",
BindingFlags.Public | BindingFlags.Static);
Run Code Online (Sandbox Code Playgroud)