這裏定義一個枚舉如下:
/// 用戶狀態枚舉
/// </summary>
[Flags]
public enum UserFlag
{
[Description("啓用")]
UnForbidden = 1,
[Description("禁用")]
Forbidden = 2,
[Description("刪除")]
Deleted = 4
}
下面定義兩個枚舉類型操作函數:
/// <summary>
/// 根據枚舉類型返回類型中的所有值,文本及描述
/// </summary>
/// <param name="type"></param>
/// <returns>返回三列數組,第0列爲Description,第1列爲Value,第2列爲Text</returns>
public static List<string[]> GetEnumOpt(Type type)
{
List<string[]> Strs = new List<string[]>();
FieldInfo[] fields = type.GetFields();
for (int i = 1, count = fields.Length; i < count; i++)
{
string[] strEnum = new string[3];
FieldInfo field = fields[i];
//值列
strEnum[1] = ((int)Enum.Parse(type, field.Name)).ToString();
//文本列賦值
strEnum[2] = field.Name;
object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (objs == null || objs.Length == 0)
{
strEnum[0] = field.Name;
}
else
{
DescriptionAttribute da = (DescriptionAttribute)objs[0];
strEnum[0] = da.Description;
}
Strs.Add(strEnum);
}
return Strs;
}
/// <summary>
/// 獲取枚舉類子項描述信息
/// </summary>
/// <param name="enumSubitem">枚舉類子項</param>
public static string GetEnumDescription(object enumSubitem)
{
enumSubitem=(Enum)enumSubitem;
string strValue = enumSubitem.ToString();
FieldInfo fieldinfo = enumSubitem.GetType().GetField(strValue);
if (fieldinfo != null)
{
Object[] objs = fieldinfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (objs == null || objs.Length == 0)
{
return strValue;
}
else
{
DescriptionAttribute da = (DescriptionAttribute)objs[0];
return da.Description;
}
}
else
{
return "不限";
}
}
其中 public static List<string[]> GetEnumOpt(Type type) 函數爲獲取一個枚舉類型所有選項並添加到List<string[]>中,爲前臺控件綁定提供數據源,前臺示例代碼如下:
List<string[]> strEnums = EnumDefine.GetEnumOpt(typeof(EnumDefine.UserFlag));
foreach (string[] strEnum in strEnums)
{
ddlUserType.Items.Add(new ListItem(strEnum[0], strEnum[1]));
}
而 public static string GetEnumDescription(object enumSubitem)函數則爲獲取某一項文字描述信息項函數,前臺可以通過調用該類型值,獲取該類型的文字描述,示例代碼如下:
EnumDefine.GetEnumDescription(UserFlag.UnForbidden)