枚举类型是定义了一组“符号名称/值”配对。枚举类型是强类型的。每个枚举类型都是从system.Enum派生,又从system.ValueType派生,而system.ValueType又从system.Object派生,所以枚举类型是指类型。
编译枚举类型时,C#编译器会把每个符号转换成类型的一个常量字段。C#编译器将枚举类型视为基元类型。
1.获取枚举列表:
/// <summary>
/// 获取枚举列表 /// </summary>
/// <param name="enumType">枚举的类型</param>
/// <returns>枚举列表</returns>
public static Dictionary<int, string> GetEnumList(Type enumType)
{ var dic = new Dictionary<int, string>(); try
{ var fd = enumType.GetFields(); for (var index = 1; index < fd.Length; ++index)
{ var info = fd[index]; var fieldValue = System.Enum.Parse(enumType, fd[index].Name); var attrs = info.GetCustomAttributes(typeof(EnumTextAttribute), false); foreach (EnumTextAttribute attr in attrs)
{ var key = (int)fieldValue; if (key == -100) continue; var value = attr.Text;
dic.Add(key, value);
}
} return dic;
} catch (Exception ex)
{ throw new Exception(ex.Message);
}
}
2.获取枚举名称:
/// <summary>
/// 获取枚举名称 /// </summary>
/// <param name="enumType">枚举的类型</param>
/// <param name="id">枚举值</param>
/// <returns>如果枚举值存在,返回对应的枚举名称,否则,返回空字符</returns>
public static string GetEnumTextById(Type enumType, int id)
{ var ret = string.Empty; try
{ var dic = GetEnumList(enumType); foreach (var item in dic)
{ if (item.Key != id) continue;
ret = item.Value; break;
} return ret;
} catch (Exception ex)
{ throw new Exception(ex.Message);
}
}
3.根据枚举值获取对应中文描述:新航道培训
/// <summary>
/// 根据枚举值获取对应中文描述 /// </summary>
/// <param name="enumValue">枚举值</param>
/// <returns>枚举值中文描述</returns>
public static string GetEnumTextByEnum(object enumValue)
{ var ret = string.Empty; if ((int)enumValue == -1) return ret; try
{ var dic = GetEnumList(enumValue.GetType()); foreach (var item in dic)
{ if (item.Key != (int)enumValue) continue;
ret = item.Value; break;
} return ret;
} catch (Exception ex)
{ throw new Exception(ex.Message);
}
}
4.获取枚举名称:
/// <summary>
/// 获取枚举名称 /// </summary>
/// <param name="enumType">枚举的类型</param>
/// <param name="index">枚举值的位置编号</param>
/// <returns>如果枚举值存在,返回对应的枚举名称,否则,返回空字符</returns>
public static string GetEnumTextByIndex(Type enumType, int index)
{ var ret = string.Empty; var dic = GetEnumList(enumType); if (index < 0 || index > dic.Count) return ret; var i = 0; foreach (var item in dic)
{ if (i == index)
{
ret = item.Value; break;
}
i++;
}
return ret;
}
5.获取枚举值:
/// <summary>
/// 获取枚举值 /// </summary>
/// <param name="enumType">枚举的类型</param>
/// <param name="name">枚举名称</param>
/// <returns>如果枚举名称存在,返回对应的枚举值,否则,返回-1</returns>
public static int GetEnumIdByName(Type enumType, string name)
{ var ret = -1; if (string.IsNullOrEmpty(name)) return ret; var dic = GetEnumList(enumType); foreach (var item in dic)
{ if (string.Compare(item.Value, name, StringComparison.Ordinal) != 0) continue;
ret = item.Key; break;
} return ret;
}
6.获取名字对应枚举值:
/// <summary>
/// 获取名字对应枚举值 /// </summary>
/// <typeparam name="T">枚举类型</typeparam>
/// <param name="name">枚举名称</param>
/// <returns></returns>
public static T GetEnumIdByName<T>(string name) where T : new()
{ var type = typeof(T);
var enumItem = (T)TypeDescriptor.GetConverter(type).ConvertFrom("-1"); if (string.IsNullOrEmpty(name)) return enumItem;
try
{ var fd = typeof(T).GetFields(); for (var index = 1; index < fd.Length; ++index)
{ var info = fd[index]; var fieldValue = System.Enum.Parse(type, fd[index].Name); var attrs = info.GetCustomAttributes(typeof(EnumTextAttribute), false); if (attrs.Length != 1) continue; var attr = (EnumTextAttribute)attrs[0]; if (!name.Equals(attr.Text)) continue;
enumItem = (T)fieldValue; break;
} return enumItem;
} catch (Exception ex)
{ throw new Exception(ex.Message);
}
}
7.获取枚举值所在的位置编号:
/// <summary>
/// 获取枚举值所在的位置编号 /// </summary>
/// <param name="enumType">枚举的类型</param>
/// <param name="name">枚举名称</param>
/// <returns>如果枚举名称存在,返回对应的枚举值的位置编号,否则,返回-1</returns>
public static int GetEnumIndexByName(Type enumType, string name)
{ var ret = -1;
if (string.IsNullOrEmpty(name)) return ret;
var dic = GetEnumList(enumType); var i = 0; foreach (var item in dic)
{ if (string.Compare(item.Value, name, StringComparison.Ordinal) == 0)
{
ret = i; break;
}
i++;
}
return ret;
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。