代碼如下:
AuditEnum.cs :
public enum AuditEnum
{
Holding=0,
Auditing=1,
Pass=2,
Reject=3
}
以asp.net為例 , 程序中某個方法可能會這樣使用枚舉值 :
public void HandleAudit(int userID, AuditEnum ae)
{
if (ae==AuditEnum.Pass)
{
//do something
}
else if (ae==AuditEnum.Reject)
{
//do other something
}
}
asp.net頁面往往需要顯示中文枚舉信息 :
序號
項目
狀態
審核人
請假單
審核通過
張三
解決方法 : 給枚舉項增加DescriptionAttribute後利用反射來獲取中文信息.
步驟 :
1 . 在定義枚舉AuditEnum的類中添加名稱空間System.ComponentModel , 給每個枚舉項加DescriptionAttribute , 示例代碼如下 :
代碼如下:
using System.ComponentModel;
public enum AuditEnum
{
[Description("未送審")]
Holding=0,
[Description("審核中")]
Auditing=1,
[Description("審核通過")]
Pass=2,
[Description("駁回")]
Reject=3
}
2 . 自定義一個類EnumService.cs , 增加靜態方法GetDescription()根據傳入的枚舉值來讀取Description信息 , 示例代碼如下 :
代碼如下:
public class EnumService
{
public static string GetDescription(Enum obj)
{
string objName = obj.ToString();
Type t = obj.GetType();
FieldInfo fi = t.GetField(objName);
DescriptionAttribute[] arrDesc = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
return arrDesc[0].Description;
}
}
3 . 在輸出枚舉值的地方增加對EnumService.GetDescription()的調用 , 示例代碼如下 :
代碼如下:
asp.net頁面代碼:
<asp:Repeater ID="AuditRepeater" runat="server" OnItemDataBound="AuditRepeater_OnItemDataBound">
<ItemTemplate>
//something ui code is here ....
<asp:Literal ID="AuditText" runat="server"></asp:Literal>
//something ui code is here ....
</ItemTemplate>
</asp:Repeater>
asp.net頁面後台代碼:
protected void AuditRepeater_OnItemDataBound(object sender, RepeaterItemEventArgs arg)
{
if (arg.Item.ItemType == ListItemType.Item)
{
Literal audit = arg.Item.FindControl("AuditText") as Literal;
AuditEnum ae = AuditEnum.Pass; //根據項目的實際情況賦值,這裡為簡化賦值AuditEnum.Pass
audit.Text = EnumService.GetDescription(we);
}
}
全文完 .
以上代碼運行於VS2010 , 有任何問題請在下方留言 , 喜歡就點推薦.