利用反射檢查對象屬性是否知足正則特

有時對象的屬性須要知足某些正則,如果單首創建方法去一個個驗證這些正則太過麻煩,這時咱們能夠給屬性添加正則特性,以下:測試

   public class student
    {
        [RegularExpression(@"^[a-zA-Z]{1,20}$", ErrorMessage = "英文姓名必須是英文字符,且長度小於20!")]
        public string EName { get; set; }
    }

 

但是有時候對象實例的生成會繞過這些正則檢查,例如直接從Excel裏數據流寫成對象。咱們能夠在數據流生成對象時候利用發射來檢查生成對象是否知足正則表達。spa

 public static void ValidateInstatnce<T>(T t)
        {
            var objectT = Activator.CreateInstance<T>();
            var propertyInfoList = objectT.GetType().GetProperties();

            foreach (var property in propertyInfoList)
            {
                var proValue = property.GetValue(t,null);

                var attars = property.GetCustomAttributes();
                foreach (var attar in attars)
                {
                    try
                    {
                        var validateAttar = attar as ValidationAttribute;
                        if (validateAttar!=null)
                        {
                            //Null對象繞過正則檢查,不會拋錯,情理之中.
                            validateAttar.Validate(proValue ,property.Name);
                        }
                    }
                    catch (Exception e)
                    {
                        if (e is ValidationException)
                        {
                            throw;
                        }
                    }
                }
            }
        }

測試結果:code

        public static void test()
        {
            try
            {
                var stu = new student { EName = "123" };
                ValidateInstatnce<student>(stu);
            }
            catch (Exception e)
            {
                
                throw e;
            }

        }
    }

 

拋出異常:對象

英文姓名必須是英文字符,且長度小於20!
相關文章
相關標籤/搜索