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));
数据源
复制代码

 



 

posted @   coder情缘  阅读(824)  评论(0编辑  收藏  举报
编辑推荐:
· 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)
点击右上角即可分享
微信分享提示