zoukankan      html  css  js  c++  java
  • c#枚举自定义,用于数据绑定。 z

    [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;
                    }
                }
            }
      
    
    枚举
    
    ?123456789101112public 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));
    
    数据源
    
  • 相关阅读:
    numpy基本使用2
    python 继承 多态
    动态规划算法题(5题)
    利用栈非递归实现块排
    数据结构
    对Node的优点和缺点提出了自己的看法?
    前后端交互流程,如何进行交互
    Web App、Hybrid App与Native App的设计差异
    什么叫优雅降级和渐进增强?
    常用博客
  • 原文地址:https://www.cnblogs.com/zeroone/p/4298467.html
Copyright © 2011-2022 走看看