• 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;
                    }
                }
            }
      
    枚举
    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));
    数据源


  • 相关阅读:
    android 11中报new Handler()已过时
    My WelcomeApplet
    设计模式(五):抽象工厂方法(多个工厂方法的组合)
    [Redis知识体系] 一文全面总结Redis知识体系
    RocketMq的事务消息发送方法,消息零丢失的实现方式,代码流程讲解,干货分享
    充血枚举的用法
    Rocketmq的启动jvm配置解析-runbroker.sh
    springboot+mybatis整合,基本框架
    rabbitmq单机入门安装教程(ubuntu环境 亲测有效)
    常用表单验证插件
  • 原文地址:https://www.cnblogs.com/noblue/p/4182393.html
Copyright © 2020-2023  润新知