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
  • 相关阅读:
    2013 新春快乐
    石头剪刀布游戏
    【MTK】MTK 报错集锦
    爱上双节棍男生的十五个理由
    Jni下NDK开发的bug问题汇总
    NDK中c语言logcat环境的搭建
    Android中Alertdialog对话框点击消失?
    Android上关于cmwap/cmnet网络切换的疑惑?
    Jni调用方法产生java.lang.UnsatisfiedLinkError错误
    android.os.NetworkOnMainThreadException问题
  • 原文地址:https://www.cnblogs.com/Jacob-Wu/p/9301843.html
Copyright © 2011-2022 走看看