コード例 #1
0
        /// <summary>
        /// 注册指定类型的值名称映射
        /// </summary>
        /// <param name="type">目标类型</param>
        /// <param name="valueNameDic">值名称字典集合</param>
        public static void RegisteType(Type type, ValueNameDictionary valueNameDic)
        {
            if (type == null)
            {
                throw new ArgumentNullException(nameof(type));
            }

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

            _typeValueNameDictionaryDic[type] = valueNameDic;
        }
コード例 #2
0
        /// <summary>
        /// 获取值对应的名称
        /// </summary>
        /// <param name="value">值</param>
        /// <param name="dic">值名称映射字典集合</param>
        /// <returns>值对应的名称</returns>
        protected override string PrimitiveGetName(object value, ValueNameDictionary dic)
        {
            string name;

            if (this._getNameFunc == null)
            {
                name = $"未知的{dic.ValueNameMapTypeAttribute.Name}[{value}]";
            }
            else
            {
                name = this._getNameFunc(value, dic);
            }

            return(name);
        }
コード例 #3
0
        /// <summary>
        /// 注册常量类
        /// </summary>
        /// <typeparam name="T">目标类型</typeparam>
        public static void RegisteType <T>()
        {
            Type type = typeof(T);
            Type valueNameMapTypeAttributeType = typeof(ValueNameMapTypeAttribute);

            object[] attrObjArr = type.GetCustomAttributes(valueNameMapTypeAttributeType, false);
            if (attrObjArr == null || attrObjArr.Length == 0)
            {
                throw new ApplicationException($"映射字段定义类型类[{type.FullName}]未标记[{valueNameMapTypeAttributeType.FullName}]特性");
            }

            var valueNameMapTypeAttribute = (ValueNameMapTypeAttribute)attrObjArr[0];
            var dic = new ValueNameDictionary(valueNameMapTypeAttribute);

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

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

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

                dic.Add(key, value);
            }

            RegisteType(type, dic);
        }
コード例 #4
0
 /// <summary>
 /// 获取值对应的名称
 /// </summary>
 /// <param name="value">值</param>
 /// <param name="dic">值名称映射字典集合</param>
 /// <returns>值对应的名称</returns>
 protected abstract string PrimitiveGetName(object value, ValueNameDictionary dic);
コード例 #5
0
 /// <summary>
 /// 获取值对应的名称
 /// </summary>
 /// <param name="value">值</param>
 /// <param name="dic">值名称映射字典集合</param>
 /// <returns>值对应的名称</returns>
 public string GetName(object value, ValueNameDictionary dic)
 {
     return(this.PrimitiveGetName(value, dic));
 }
コード例 #6
0
 /// <summary>
 /// 注册常量类
 /// </summary>
 /// <typeparam name="T">目标类型</typeparam>
 /// <param name="valueNameDic">值名称字典集合</param>
 public static void RegisteType <T>(ValueNameDictionary valueNameDic)
 {
     RegisteType(typeof(T), valueNameDic);
 }