/// <summary>
        /// 尝试根据组标识和值获取值描述(获取成功返回true;失败返回false)
        /// </summary>
        /// <param name="groupId">组标识</param>
        /// <param name="value">值</param>
        /// <param name="des">值描述</param>
        /// <returns>获取成功返回true;失败返回false</returns>
        public static bool TryGetDescriptionByValue(object groupId, object value, out string des)
        {
            des = null;
            ValueDescriptionGroup group = GetValueDescriptionGroupById(groupId);

            if (group == null)
            {
                return(false);
            }

            DisplayNameExAttribute desAtt;

            if (group.TryGetValue(value, out desAtt))
            {
                des = desAtt.Description;
                return(true);
            }

            var groupDescriptionAtt = group.GroupDescriptionAttribute;

            if (groupDescriptionAtt != null && groupDescriptionAtt.Extend != null)
            {
                des = groupDescriptionAtt.Extend.GetDescription(value, group);
                return(true);
            }

            return(false);
        }
        /// <summary>
        /// 根据组标识和值获取值描述(获取成功返回值描述;失败抛出ArgumentException异常)
        /// </summary>
        /// <param name="groupId">组标识</param>
        /// <param name="value">值</param>
        /// <returns>值描述</returns>
        public static string GetDescriptionByValue(object groupId, object value)
        {
            ValueDescriptionGroup group = GetValueDescriptionGroupById(groupId);

            if (group == null)
            {
                throw new ArgumentException($"组标识\"{groupId}\"未注册");
            }

            DisplayNameExAttribute desAtt;

            if (group.TryGetValue(value, out desAtt))
            {
                return(desAtt.Description);
            }

            var groupDescriptionAtt = group.GroupDescriptionAttribute;

            if (groupDescriptionAtt != null && groupDescriptionAtt.Extend != null)
            {
                return(groupDescriptionAtt.Extend.GetDescription(value, group));
            }
            else
            {
                throw new ArgumentException($"组标识\"{groupId}\"值\"{value}\"对应的描述不存在");
            }
        }
        /// <summary>
        /// 清空指定组标识值描述组
        /// </summary>
        /// <param name="groupId">组标识</param>
        public static void Clear(object groupId)
        {
            ValueDescriptionGroup group = GetValueDescriptionGroupById(groupId);

            if (group != null)
            {
                group.Clear();
            }
        }
        /// <summary>
        /// 获取指定类型名称数组
        /// </summary>
        /// <param name="groupId">组标识</param>
        /// <returns>类型所有定义常量值数组</returns>
        public static string[] GetNames(object groupId)
        {
            ValueDescriptionGroup group = GetValueDescriptionGroupById(groupId);

            if (group != null)
            {
                return(group.Values.ToArray().Select(t => { return t.DisplayName; }).ToArray());
            }
            else
            {
                throw new ArgumentException($"组标识\"{groupId}\"未注册");
            }
        }
        /// <summary>
        /// 获取指定类型值数组
        /// </summary>
        /// <param name="groupId">组标识</param>
        /// <returns>类型所有定义常量值数组</returns>
        public static object[] GetValues(object groupId)
        {
            ValueDescriptionGroup group = GetValueDescriptionGroupById(groupId);

            if (group != null)
            {
                return(group.Keys.ToArray());
            }
            else
            {
                throw new ArgumentException($"组标识\"{groupId}\"未注册");
            }
        }
        /// <summary>
        /// 注册描述组
        /// </summary>
        /// <param name="groupId">组标识</param>
        /// <param name="group">值描述组</param>
        public static void Registe(object groupId, ValueDescriptionGroup group)
        {
            if (groupId == null)
            {
                throw new ArgumentNullException(nameof(groupId));
            }

            if (group == null)
            {
                throw new ArgumentNullException(nameof(group));
            }

            _typeValueDescriptionGroupDic.AddOrUpdate(groupId, group, (oldKey, oldValue) => { return(group); });
        }
        /// <summary>
        /// 注册常量或枚举值描述
        /// </summary>
        /// <typeparam name="T">目标类型</typeparam>
        public static void Registe <T>()
        {
            Type type = typeof(T);

            ValueDescriptionGroupAttribute valueDescriptionGroupAtt;
            Type valueDescriptionGroupAttributeType = typeof(ValueDescriptionGroupAttribute);

            object[] attrObjArr = type.GetCustomAttributes(valueDescriptionGroupAttributeType, false);
            if (attrObjArr == null || attrObjArr.Length == 0)
            {
                valueDescriptionGroupAtt = null;
            }
            else
            {
                valueDescriptionGroupAtt = (ValueDescriptionGroupAttribute)attrObjArr[0];
            }

            var group = new ValueDescriptionGroup(valueDescriptionGroupAtt);

            FieldInfo[]            fieldInfoArr = type.GetFields(System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
            Type                   displayNameExAttributeType = typeof(DisplayNameExAttribute);
            object                 key;
            DisplayNameExAttribute value;

            foreach (var fieldInfo in fieldInfoArr)
            {
                attrObjArr = fieldInfo.GetCustomAttributes(displayNameExAttributeType, true);
                if (attrObjArr == null || attrObjArr.Length == 0)
                {
                    //字段无特性,忽略该字段
                    continue;
                }

                key   = fieldInfo.GetValue(null);
                value = (DisplayNameExAttribute)attrObjArr[0];
                if (group.ContainsKey(key))
                {
                    throw new ApplicationException($"类型[{type.FullName}]字段值[{key}]重复");
                }

                group.Add(key, value);
            }

            Registe(type, group);
        }
        /// <summary>
        /// 根据名称获取值(获取成功返回true;失败返回false)
        /// </summary>
        /// <param name="groupId">组标识</param>
        /// <param name="name">名称</param>
        /// <param name="value">值</param>
        /// <returns>获取成功返回true;失败返回false</returns>
        public static bool TryGerValueByName(object groupId, string name, out object value)
        {
            ValueDescriptionGroup group = GetValueDescriptionGroupById(groupId);

            if (group == null)
            {
                throw new ArgumentException($"组标识\"{groupId}\"未注册");
            }

            var kvArr = group.ToArray().Where(t => { return(string.Equals(t.Value, name)); }).ToArray();

            if (kvArr.Length > 0)
            {
                value = kvArr[0].Key;
                return(true);
            }

            throw new ArgumentException($"组标识\"{groupId}\"名称\"{name}\"对应的值不存在");
        }
Esempio n. 9
0
        /// <summary>
        /// 获取扩展值对应的描述
        /// </summary>
        /// <param name="value">值</param>
        /// <param name="group">描述组</param>
        /// <returns>值对应的描述</returns>
        protected override string PrimitiveGetDescription(object value, ValueDescriptionGroup group)
        {
            string des;

            if (this._getDescriptionFunc == null)
            {
                if (group.GroupDescriptionAttribute != null)
                {
                    des = $"未知的{group.GroupDescriptionAttribute.DisplayName}\"{value}\"";
                }
                else
                {
                    des = $"未知的\"{value}\"";
                }
            }
            else
            {
                des = this._getDescriptionFunc(value, group);
            }

            return(des);
        }
Esempio n. 10
0
        /// <summary>
        /// 获取扩展值对应的名称
        /// </summary>
        /// <param name="value">值</param>
        /// <param name="group">描述组</param>
        /// <returns>值对应的名称</returns>
        protected override string PrimitiveGetName(object value, ValueDescriptionGroup group)
        {
            string name;

            if (this._getNameFunc == null)
            {
                if (group.GroupDescriptionAttribute != null)
                {
                    name = $"未知的{group.GroupDescriptionAttribute.DisplayName}\"{value}\"";
                }
                else
                {
                    name = $"未知的\"{value}\"";
                }
            }
            else
            {
                name = this._getNameFunc(value, group);
            }

            return(name);
        }
Esempio n. 11
0
 /// <summary>
 /// 获取扩展值对应的描述
 /// </summary>
 /// <param name="value">值</param>
 /// <param name="group">描述组</param>
 /// <returns>值对应的描述</returns>
 protected abstract string PrimitiveGetDescription(object value, ValueDescriptionGroup group);
Esempio n. 12
0
 /// <summary>
 /// 获取扩展值对应的描述
 /// </summary>
 /// <param name="value">值</param>
 /// <param name="group">描述组</param>
 /// <returns>值对应的描述</returns>
 public string GetDescription(object value, ValueDescriptionGroup group)
 {
     return(this.PrimitiveGetDescription(value, group));
 }