/// <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; }
/// <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); }
/// <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); }
/// <summary> /// 获取值对应的名称 /// </summary> /// <param name="value">值</param> /// <param name="dic">值名称映射字典集合</param> /// <returns>值对应的名称</returns> protected abstract string PrimitiveGetName(object value, ValueNameDictionary dic);
/// <summary> /// 获取值对应的名称 /// </summary> /// <param name="value">值</param> /// <param name="dic">值名称映射字典集合</param> /// <returns>值对应的名称</returns> public string GetName(object value, ValueNameDictionary dic) { return(this.PrimitiveGetName(value, dic)); }
/// <summary> /// 注册常量类 /// </summary> /// <typeparam name="T">目标类型</typeparam> /// <param name="valueNameDic">值名称字典集合</param> public static void RegisteType <T>(ValueNameDictionary valueNameDic) { RegisteType(typeof(T), valueNameDic); }