泛型

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

 

posted @ 2018-07-10 22:12  码到世界末日  阅读(158)  评论(0编辑  收藏  举报