zoukankan      html  css  js  c++  java
  • 特性(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;
            }
        }
    }
    View Code

    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;
            }
        }
    }
    View Code
  • 相关阅读:
    org.apache.maven.archiver.MavenArchiver.getManifest
    网易云信发送短信验证码
    background-attachment:fixed;
    background-size属性100% cover contain
    width:100% width:auto 区别
    背景图全屏显示
    多行文字的垂直居中
    路径问题../绝对路径/
    用position子绝父相和css3动画,当鼠标一上去元素从底部慢慢向上
    前置后置运算符重载
  • 原文地址:https://www.cnblogs.com/Jacob-Wu/p/9301843.html
Copyright © 2011-2022 走看看