• 泛型


    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 System;
    using System.Reflection;
    
    namespace MyAttribute
    {
        public static class DataValidate
        {
            public static void Validate<T>(this T t)
            {
                Type type = typeof(T);
                foreach (var item in type.GetProperties())
                {
                    if (item.IsDefined(typeof(AgeAttribute), true))
                    {
                        AgeAttribute ageAttribute = item.GetCustomAttribute(typeof(AgeAttribute)) as AgeAttribute;
                        if (!ageAttribute.Validate(item.GetValue(t)))
                        {
                            throw new Exception("年龄格式不正确");
                        }
                    }
                    if (item.IsDefined(typeof(QQAttribute), true))
                    {
                        QQAttribute qqAttribute = item.GetCustomAttribute(typeof(QQAttribute)) as QQAttribute;
                        if (!qqAttribute.Validate(item.GetValue(t)))
                        {
                            throw new Exception("QQ格式不正确");
                        }
                    }
                }
            }
        }
        public class Yun
        {
            public int Id { set; get; }
    
            [AgeAttribute(0, 100)]
            public int Age { set; get; }
            [QQAttribute(10001, 9999999999)]
            public long QQ { set; get; }
            public string Email { set; get; }
        }
    
        public class QQAttribute : Attribute
        {
            public long _min { set; get; }
            public long _max { set; get; }
            public QQAttribute(long min, long max)
            {
                this._min = min;
                this._max = max;
            }
            public bool Validate(object obj)
            {
                if (obj != null)
                {
                    if (long.TryParse(obj.ToString(), out long _Result))
                    {
                        return _Result >= _min && _Result <= _max;
                    }
                }
                return false;
            }
        }
    
        public class AgeAttribute : Attribute
        {
            public int _min { set; get; }
            public int _max { set; get; }
            public AgeAttribute(int min, int max)
            {
                this._min = min;
                this._max = max;
            }
            public bool Validate(object obj)
            {
                if (obj != null)
                {
                    if (Int32.TryParse(obj.ToString(), out int _Result))
                    {
                        return _Result >= _min && _Result <= _max;
                    }
                }
                return false;
            }
        }
    }
    DataValidate
  • 相关阅读:
    多重继承的构造函数和析构函数的执行顺序(包含虚基类)
    java解析XML之DOM解析和SAX解析(包含CDATA的问题)
    java解析XML之DOM解析和SAX解析(包含CDATA的问题)
    计算机网络总结之运输层
    Method, apparatus, and system for speculative abort control mechanisms
    [转]如何用adb控制MTKLogger
    反转单向、双向链表
    删除链表中间节点和a/b处的节点
    Android 中log 找到关键log
    在单链表和双链表中删除倒数第k个结点
  • 原文地址:https://www.cnblogs.com/Jacob-Wu/p/9291776.html
Copyright © 2020-2023  润新知