zoukankan      html  css  js  c++  java
  • 泛型

    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
  • 相关阅读:
    C#基于LibUsbDotNet实现USB通信(一)
    Visual Studio 删除空行
    不安全代码只会在使用 /unsafe 编译的情况下出现
    VS2013 中 CString类型转换为LPCSTR类型
    Linux 下各文件夹的含义
    每日算法---Two Sum
    跟我一步一步写出MongoDB Web 可视化工具(二)
    跟我一步一步写出MongoDB Web 可视化工具(一)
    springcloud 微服务之间传递token解决方案
    Git设定不合并的文件
  • 原文地址:https://www.cnblogs.com/Jacob-Wu/p/9291776.html
Copyright © 2011-2022 走看看