特性(Attribute)
1.枚举获取特性,转换值
using System; using System.Reflection; namespace MyAttribute { public static class HelloExtesion { public static string GetStr(this Enum e) { Type type = typeof(UserState); FieldInfo p = type.GetField(e.ToString()); if (p.IsDefined(typeof(CSAttribute), true)) { CSAttribute cs = p.GetCustomAttribute(typeof(CSAttribute)) as CSAttribute; return cs.Name; } else { return e.ToString(); } } } public enum UserState { [CS("富人")] Rich = 1, [CS("一般人")] Normal = 2, //[CS("穷人")] Poor = 3, } public class CSAttribute : Attribute { public string Name { set; get; } public CSAttribute(string Name) { this.Name = Name; } } }
2.特性验证字段格式
using HomeWork1.AttributeModels; using System; using System.Reflection; namespace HomeWork1.Tool { public static class ValidateTool { public static void ValidateEntity<T>(this T t) where T : class { Type type = typeof(T); foreach (var prop in type.GetProperties()) { if(prop.IsDefined(typeof(AbstractAttribute),true)) { foreach (AbstractAttribute item in prop.GetCustomAttributes(typeof(AbstractAttribute))) { string s = item.Validate(prop.GetValue(t)); if (!string.IsNullOrEmpty(s)) { throw new Exception($"{prop.GetChinese()}({prop.Name}):{s}"); } } } } } public static string GetColumnName(this PropertyInfo Prop) { if (Prop.IsDefined(typeof(ColumnAttribute), true)) { return (Prop.GetCustomAttribute(typeof(ColumnAttribute)) as ColumnAttribute).Name; } return Prop.Name; } public static string GetTableName(this Type type) { if (type.IsDefined(typeof(TableNameAttribute), true)) { return (type.GetCustomAttribute(typeof(TableNameAttribute)) as TableNameAttribute).Name; } return type.Name; } public static string GetChinese(this PropertyInfo Prop) { if (Prop.IsDefined(typeof(ChineseAttribute), true)) { return (Prop.GetCustomAttribute(typeof(ChineseAttribute)) as ChineseAttribute).Name; } return Prop.Name; } } }