c#枚举自定义,用于数据绑定。
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Enum)] public class EnumSignAttribute : Attribute { // Fields private string _displayName; public EnumSignAttribute(string displayname) { this._displayName = displayname; } // Properties public string DisplayName { get { return this._displayName; } set { this._displayName = value; } } }
1 2 3 4 5 6 7 8 9 10 11 12 | public enum DataType { [EnumSign( "布尔类型" )] Boolean = 4, [EnumSign( "日期时间" )] DateTime = 3, None = 0, [EnumSign( "数字" )] Numberic = 2, [EnumSign( "字符串" )] String = 1 } |
public static class EnumsUtils { /// <summary> /// 根据object类型的数据,获取枚举类型 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="enumValue"></param> /// <returns></returns> public static T ConvertToEnum<T>(object enumValue) { if (enumValue is int) { return (T)enumValue; } Type type = typeof(T); FieldInfo[] fields = type.GetFields(); int num = 0; foreach (FieldInfo info in fields) { if (num == 0) { num++; } else { T local = (T)info.GetValue(type); if (local.ToString().Equals(enumValue)) { return local; } } } return default(T); } /// <summary> /// 根据枚举标识,获取显示名字 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="enumValue">枚举标识</param> /// <returns>显示名字</returns> public static string GetAttriValue<T>(T enumValue) { Type type = typeof(T); FieldInfo[] fields = type.GetFields(); int num = 0; foreach (FieldInfo info in fields) { if (num == 0) { num++; } else { T local = (T)info.GetValue(type); if (local.Equals(enumValue)) { return GetDisplayName(info); } } } return string.Empty; } private static string GetDisplayName(FieldInfo field) { string displayName = string.Empty; object[] arr = field.GetCustomAttributes(typeof(EnumSignAttribute), true); if (arr.Length > 0) { EnumSignAttribute aa = (EnumSignAttribute)arr[0]; displayName = aa.DisplayName; } return displayName; } /// <summary> /// 获取枚举集合列表 /// </summary> /// <param name="type"></param> /// <returns></returns> public static EnumList GetSourceEnum(Type type) { EnumList list = new EnumList(); FieldInfo[] fields = type.GetFields(); foreach (FieldInfo field in fields) { EnumItem item = new EnumItem(); if (field.FieldType.IsEnum) { item.Value = ((int)type.InvokeMember(field.Name, BindingFlags.GetField, null, null, null)); object[] arr = field.GetCustomAttributes(typeof(EnumSignAttribute), true); if (arr.Length > 0) { EnumSignAttribute aa = (EnumSignAttribute)arr[0]; item.Display = aa.DisplayName; } item.Name = field.Name; list.Add(item); } } return list; } } [StructLayout(LayoutKind.Sequential)] public struct EnumItem { private string _display; private string _name; private object _value; public EnumItem(string display, string name, object value) { this._display = display; this._name = name; this._value = value; } public string Display { get { return this._display; } set { this._display = value; } } public string Name { get { return this._name; } set { this._name = value; } } public object Value { get { return this._value; } set { this._value = value; } } }
public class EnumList : BindingList<EnumItem> { } //方法1: EnumList = EnumsUtils.GetSourceEnum.(typeof(DataType)); //方法2: var = EnumsUtils.GetSourceEnum.(typeof(DataType));
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 程序员常用高效实用工具推荐,办公效率提升利器!
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)