当定义一个枚举时,或添加了属性注释。此法提供了一个途径:获取这些注释
STEP1:
/// <summary>
/// 自定义属性--用于在枚举中注释
/// </summary>
[AttributeUsage(AttributeTargets.Field, AllowMultiple = true, Inherited = true)]
public class DescripValsAttribute:Attribute
{
public string description;
public DescripValsAttribute(string text)
{
description = text;
}
}
STEP2:
/// <summary>
/// 自定义枚举类--使用了自定义属性
/// </summary>
public enum PowerEnums
{
[DescripVals("不复权")]
XdrNone=0x00,
[DescripVals("前复权")]
XdrFward=0x01,
[DescripVals("后复权")]
XdrBward=0x02
}
STEP3:
public class test
{
/// <summary>
/// 获取枚举下的所有注释
/// </summary>
/// <param name="Enumtype">枚举类型</param>
/// <returns></returns>
public static Dictionary<string,string> GetEnumDescriptions(Type Enumtype)
{
Type type = typeof(DescripValsAttribute);
Dictionary<string, string> returnList = new Dictionary<string, string>();
foreach (FieldInfo fi in Enumtype.GetFields())
{
object[] arr = fi.GetCustomAttributes(type, true);
if (arr.Length > 0)
{
returnList.Add(((DescripValsAttribute)arr[0]).description,fi.Name);
}
}
return returnList;
}
/// <summary>
/// 获取枚举下某一注释
/// </summary>
/// <param name="type">枚举类型</param>
/// <param name="value">某一枚举字符串形式</param>
/// <returns></returns>
public static string ToDescription(Type type,string value)
{
FieldInfo info = type.GetField(value);
DescripValsAttribute attr = info.GetCustomAttributes(typeof(DescripValsAttribute), true)[0] as DescripValsAttribute;
if (attr != null)
{
return attr.description;
}
else
{
return null;
}
}
}
STEP4:使用测试
STEP5:效果如图class Program { static void Main(string[] args) { Dictionary<string,string> allDescriptions= test.GetEnumDescriptions(typeof(PowerEnums)); string specificValue = test.ToDescription(typeof(PowerEnums), PowerEnums.XdrBward.ToString()); Console.WriteLine("allDescriptions:"); foreach(var item in allDescriptions) { Console.WriteLine(item.Key + "," + item.Value); } Console.WriteLine("\n==================================\nspecificValue:"); Console.WriteLine(specificValue); Console.ReadKey(); } }