C# .NET 获取枚举值的自定义属性(特性)信息
2013-01-30 16:43
239 查看
一、引言
枚举为我看日常开发的可读性提供的非常好的支持,但是有时我们需要得到枚举值得描述信息或者是注释(备注)信息
比如要获得 TestEmun.aaa 属性值得备注 AAA,比较不方便得到。
public enum TestEmun
{
/// AAA
aaa =1,
/// BBB
bbb =2,
/// CCC
ccc =3
}
如果要得到类似的效果,我们就需要修改一下代码了,使用反射很容易得到这个结果。
二、定义特性
using System;
using System.Reflection;
namespace Lib.DataModel.SysEnum
{
/// <summary>
/// 备注特性
/// </summary>
public class RemarkAttribute : Attribute
{
private string m_remark;
public RemarkAttribute(string remark)
{
this.m_remark = remark;
}
/// <summary>
/// 备注
/// </summary>
public string Remark
{
get { return m_remark; }
set { m_remark = value; }
}
/// <summary>
/// 获取枚举的备注信息
/// </summary>
/// <param name="val">枚举值</param>
/// <returns></returns>
public static string GetEnumRemark(Enum val)
{
Type type = val.GetType();
FieldInfo fd = type.GetField(val.ToString());
if (fd == null)
return string.Empty;
object[] attrs = fd.GetCustomAttributes(typeof(RemarkAttribute), false);
string name = string.Empty;
foreach (RemarkAttribute attr in attrs)
{
name = attr.Remark;
}
return name;
}
}
/// <summary>
/// 枚举扩展类
/// </summary>
public static class EnumExtension
{
/// <summary>
/// 获取枚举的备注信息
/// </summary>
/// <param name="em"></param>
/// <returns></returns>
public static string GetRemark(this Enum em)
{
Type type = em.GetType();
FieldInfo fd = type.GetField(em.ToString());
if (fd == null)
return string.Empty;
object[] attrs = fd.GetCustomAttributes(typeof(RemarkAttribute), false);
string name = string.Empty;
foreach (RemarkAttribute attr in attrs)
{
name = attr.Remark;
}
return name;
}
}
}
三 、测试代码
public class UnitTest
{
public enum TestEmun
{
[Remark("AAA")]
aaa,
[Remark("BBB")]
bbb,
[Remark("CCC")]
ccc
}
public void GetEnumName()
{
//需要引用 Lib.DataModel.SysEnum 命名空间才可以使用 扩展方法
string name = TestEmun.aaa.GetRemark();
/*
name 值为 AAA
*/
}
}
四、扩展
//获取枚举的所有属性名称
var fields = typeof(MyEnum).GetFields(BindingFlags.Static | BindingFlags.Public);
foreach (var fi in fields)
Console.WriteLine(fi.Name);
草青工作室:http://blog.csdn.net/xxj_jing
原文地址:http://blog.csdn.net/xxj_jing/article/details/8556780
枚举为我看日常开发的可读性提供的非常好的支持,但是有时我们需要得到枚举值得描述信息或者是注释(备注)信息
比如要获得 TestEmun.aaa 属性值得备注 AAA,比较不方便得到。
public enum TestEmun
{
/// AAA
aaa =1,
/// BBB
bbb =2,
/// CCC
ccc =3
}
如果要得到类似的效果,我们就需要修改一下代码了,使用反射很容易得到这个结果。
二、定义特性
using System;
using System.Reflection;
namespace Lib.DataModel.SysEnum
{
/// <summary>
/// 备注特性
/// </summary>
public class RemarkAttribute : Attribute
{
private string m_remark;
public RemarkAttribute(string remark)
{
this.m_remark = remark;
}
/// <summary>
/// 备注
/// </summary>
public string Remark
{
get { return m_remark; }
set { m_remark = value; }
}
/// <summary>
/// 获取枚举的备注信息
/// </summary>
/// <param name="val">枚举值</param>
/// <returns></returns>
public static string GetEnumRemark(Enum val)
{
Type type = val.GetType();
FieldInfo fd = type.GetField(val.ToString());
if (fd == null)
return string.Empty;
object[] attrs = fd.GetCustomAttributes(typeof(RemarkAttribute), false);
string name = string.Empty;
foreach (RemarkAttribute attr in attrs)
{
name = attr.Remark;
}
return name;
}
}
/// <summary>
/// 枚举扩展类
/// </summary>
public static class EnumExtension
{
/// <summary>
/// 获取枚举的备注信息
/// </summary>
/// <param name="em"></param>
/// <returns></returns>
public static string GetRemark(this Enum em)
{
Type type = em.GetType();
FieldInfo fd = type.GetField(em.ToString());
if (fd == null)
return string.Empty;
object[] attrs = fd.GetCustomAttributes(typeof(RemarkAttribute), false);
string name = string.Empty;
foreach (RemarkAttribute attr in attrs)
{
name = attr.Remark;
}
return name;
}
}
}
三 、测试代码
public class UnitTest
{
public enum TestEmun
{
[Remark("AAA")]
aaa,
[Remark("BBB")]
bbb,
[Remark("CCC")]
ccc
}
public void GetEnumName()
{
//需要引用 Lib.DataModel.SysEnum 命名空间才可以使用 扩展方法
string name = TestEmun.aaa.GetRemark();
/*
name 值为 AAA
*/
}
}
四、扩展
//获取枚举的所有属性名称
var fields = typeof(MyEnum).GetFields(BindingFlags.Static | BindingFlags.Public);
foreach (var fi in fields)
Console.WriteLine(fi.Name);
草青工作室:http://blog.csdn.net/xxj_jing
原文地址:http://blog.csdn.net/xxj_jing/article/details/8556780
相关文章推荐
- C# .NET 获取枚举值的自定义属性(特性)信息
- C# .NET 获取枚举值的自定义属性(特性/注释/备注)信息
- .NET(C#):获取方法返回值的自定义特性(Attribute)
- 如何获取类或属性的自定义特性(Attribute)
- C#/VB.NET 获取电脑属性(硬盘ID、硬盘容量、Cpu序列号、MAC地址、系统类型)
- .NET C#获取当前网页地址信息
- .net c# 获取枚举值集合与其属性
- .net c#获取自定义Attribute
- Asp.net Mvc过滤器获取请求方法自定义特性
- asp.net WebForm 前台获取后台c#代码信息
- 如何在C#.net中自定义和使用特性
- C# (asp.net) 获取文件详细备注信息
- .net c#获取自定义Attribute
- ASP.NET(c#)运用API函数获取系统信息
- ASP.NET C# 获取客户端及浏览器信息
- C# 主窗体获取自定义控件中所做check的信息
- .net c#获取自定义Attribute
- asp.net(c#)获取iis的站点信息(转)
- C#.Net获取Mac等PC信息
- .NET C#获取当前网页地址信息