C#中枚舉的使用
1.原則上全部使用枚舉,不使用常量,除非常量是一個,不是一組
2.如果一組常量中增減常量後要對代碼修改,則要將這組常量定義為枚舉
3.如果一組常量中增減常量後代碼不需要修改,則要將這組常量存儲到字碼主檔中,由數據庫進行維護
枚舉擴展方法
1.將字符串轉為枚舉
/// <summary>
/// 通枚舉項的名字轉換為枚舉
/// </summary>
/// <typeparam name="TEnum">要轉換的枚舉類型</typeparam>
/// <param name="enumName">枚舉項的名字</param>
/// <returns></returns>
public static TEnum ToEnum<TEnum>(this string enumName) where TEnum : struct, IComparable, IFormattable, IConvertible
{
return (TEnum)Enum.Parse(typeof(TEnum), enumName);
}
2.獲取枚舉的描述,在枚舉項定義時加上Description 特性
/// <summary>
/// 獲取一個枚舉值的描述
/// </summary>
/// <param name="obj">枚舉值</param>
/// <returns></returns>
public static string GetDescription(this Enum obj)
{
FieldInfo fi = obj.GetType().GetField(obj.ToString());
DescriptionAttribute[] arrDesc = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
return arrDesc[0].Description;
}
3.獲取枚舉的數據清單,方便綁定到下拉列表等控件
/// <summary>
/// 獲取枚舉的(描述,名稱,值)數據列表,通常用於綁定到控件
/// </summary>
/// <typeparam name="TEnum">枚舉類型</typeparam>
/// <returns></returns>
public static List<Tuple<string, string, int>> GetEnumDataList<TEnum>() where TEnum : struct , IComparable, IFormattable, IConvertible
{
List<Tuple<string, string, int>> dataList = new List<Tuple<string, string, int>>();
Type t = typeof(TEnum);
if (!t.IsEnum)
{
return null;
}
Array arrays = Enum.GetValues(t);
for (int i = 0; i < arrays.LongLength; i++)
{
Enum tmp = (Enum)arrays.GetValue(i);
string description = GetDescription(tmp);
string name = tmp.ToString();
int value = Convert.ToInt32( tmp);
dataList.Add(new Tuple<string, string, int>(description, name, value));
}
return dataList;
}