自定義枚舉類型註釋屬性,並在程序中獲取
//方法:
public static string GetEnumDescription<TEnum>(object value)
{
Type enumType = typeof(TEnum);
if (!enumType.IsEnum)
{
throw new ArgumentException("enumItem requires a Enum ");
}
var name = Enum.GetName(enumType, Convert.ToInt32(value));
if (name == null)
return string.Empty;
object[] objs = enumType.GetField(name).GetCustomAttributes(typeof(DescriptionAttribute), false);
if (objs == null || objs.Length == 0)
{
return string.Empty;
}
else
{
DescriptionAttribute attr = objs[0] as DescriptionAttribute;
return attr.Description;
}
}
// 調用:
string desc=GetEnumDescription<Filter>(Filter.Public); //得到Filter(enum)中,爲Public 所定義的描述信息.
// Filter枚舉的描述:
public enum Filter
{
/// <summary>
/// 全部
/// </summary>
[Description("全部")]
All = 1,
/// <summary>
/// 已分配
/// </summary>
[Description("已分配")]
Assigned = 2,
/// <summary>
/// 待分配
/// </summary>
[Description("待分配")]
Assigning = 3,
/// <summary>
/// 返回調整
/// </summary>
[Description("返回調整")]
Adjusting = 4,
/// <summary>
/// 已拒絕
/// </summary>
[Description("已拒絕")]
Reject = 5,
/// <summary>
/// 公共
/// </summary>
[Description("公共")]
Public = 6,
/// <summary>
/// Sales把發回調整的客戶編輯後不先提交只保存信息
/// </summary>
[Description("草稿")]
Draft = 7,
/// <summary>
/// 排隊
/// </summary>
[Description("排隊")]
InQueue = 8,
/// <summary>
/// 發放給大區經理審批
/// </summary>
[Description("審批轉移")]
ToManagerCheck = 9,
/// <summary>
/// 不返回任何值的條件
/// </summary>
None = -1,
}
//4, DescriptionAttribute 的定義:
public class DescriptionAttribute : Attribute
{
public DescriptionAttribute(string desc);
public string Description { get; set; }
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public partial class 枚舉_Enum_自定義屬性 : System.Web.UI.Page
{
protected void Page_Load(object sender , EventArgs e)
{
string desc = GetEnumDescription<MyColorEnum>(MyColorEnum.red);
//desc = GetEnumDescription<MyColorEnum>(1);
Response.Write(desc);
}
public enum MyColorEnum
{
[DescriptionAttribute("紅色")]
red ,
[DescriptionAttribute("藍色")]
blue ,
[DescriptionAttribute("綠色")]
green ,
[DescriptionAttribute("白色")]
white
}
//其實這個屬性已經有了:
//public class DescripteAttribute : Attribute
//{
// public DescripteAttribute(string desc)
// {
// this._description = desc;
// }
// private string _description;
// public string Description
// {
// get
// {
// return this._description;
// }
// set
// {
// this._description = value;
// }
// }
//}
/// <summary>
/// 獲取枚舉項的描述
/// </summary>
/// <param name="enumItem">具體枚舉類型</param>
/// <returns></returns>
public static string GetEnumDescription<TEnum>(object value)
{
Type enumType = typeof(TEnum);
if(!enumType.IsEnum)
{
throw new ArgumentException("不是枚舉類型");
}
string enumItem = Enum.GetName(enumType , Convert.ToInt32(value));
if(enumItem == null)
{
return string.Empty;
}
object[] objs = enumType.GetField(enumItem).GetCustomAttributes(typeof(DescriptionAttribute) , false);
if(objs == null || objs.Length == 0)
{
return string.Empty;
}
else
{
DescriptionAttribute attr = objs[0] as DescriptionAttribute;
return attr.Description;
}
}
}
public static string GetEnumDescription<TEnum>(object value)
{
Type enumType = typeof(TEnum);
if (!enumType.IsEnum)
{
throw new ArgumentException("enumItem requires a Enum ");
}
var name = Enum.GetName(enumType, Convert.ToInt32(value));
if (name == null)
return string.Empty;
object[] objs = enumType.GetField(name).GetCustomAttributes(typeof(DescriptionAttribute), false);
if (objs == null || objs.Length == 0)
{
return string.Empty;
}
else
{
DescriptionAttribute attr = objs[0] as DescriptionAttribute;
return attr.Description;
}
}
// 調用:
string desc=GetEnumDescription<Filter>(Filter.Public); //得到Filter(enum)中,爲Public 所定義的描述信息.
// Filter枚舉的描述:
public enum Filter
{
/// <summary>
/// 全部
/// </summary>
[Description("全部")]
All = 1,
/// <summary>
/// 已分配
/// </summary>
[Description("已分配")]
Assigned = 2,
/// <summary>
/// 待分配
/// </summary>
[Description("待分配")]
Assigning = 3,
/// <summary>
/// 返回調整
/// </summary>
[Description("返回調整")]
Adjusting = 4,
/// <summary>
/// 已拒絕
/// </summary>
[Description("已拒絕")]
Reject = 5,
/// <summary>
/// 公共
/// </summary>
[Description("公共")]
Public = 6,
/// <summary>
/// Sales把發回調整的客戶編輯後不先提交只保存信息
/// </summary>
[Description("草稿")]
Draft = 7,
/// <summary>
/// 排隊
/// </summary>
[Description("排隊")]
InQueue = 8,
/// <summary>
/// 發放給大區經理審批
/// </summary>
[Description("審批轉移")]
ToManagerCheck = 9,
/// <summary>
/// 不返回任何值的條件
/// </summary>
None = -1,
}
//4, DescriptionAttribute 的定義:
public class DescriptionAttribute : Attribute
{
public DescriptionAttribute(string desc);
public string Description { get; set; }
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public partial class 枚舉_Enum_自定義屬性 : System.Web.UI.Page
{
protected void Page_Load(object sender , EventArgs e)
{
string desc = GetEnumDescription<MyColorEnum>(MyColorEnum.red);
//desc = GetEnumDescription<MyColorEnum>(1);
Response.Write(desc);
}
public enum MyColorEnum
{
[DescriptionAttribute("紅色")]
red ,
[DescriptionAttribute("藍色")]
blue ,
[DescriptionAttribute("綠色")]
green ,
[DescriptionAttribute("白色")]
white
}
//其實這個屬性已經有了:
//public class DescripteAttribute : Attribute
//{
// public DescripteAttribute(string desc)
// {
// this._description = desc;
// }
// private string _description;
// public string Description
// {
// get
// {
// return this._description;
// }
// set
// {
// this._description = value;
// }
// }
//}
/// <summary>
/// 獲取枚舉項的描述
/// </summary>
/// <param name="enumItem">具體枚舉類型</param>
/// <returns></returns>
public static string GetEnumDescription<TEnum>(object value)
{
Type enumType = typeof(TEnum);
if(!enumType.IsEnum)
{
throw new ArgumentException("不是枚舉類型");
}
string enumItem = Enum.GetName(enumType , Convert.ToInt32(value));
if(enumItem == null)
{
return string.Empty;
}
object[] objs = enumType.GetField(enumItem).GetCustomAttributes(typeof(DescriptionAttribute) , false);
if(objs == null || objs.Length == 0)
{
return string.Empty;
}
else
{
DescriptionAttribute attr = objs[0] as DescriptionAttribute;
return attr.Description;
}
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.