C# 通过反射检查属性是否包含特定字符串

2021-03-19 02:24

阅读:672

标签:exception   迭代   turn   model   for   反射   static   cat   col   

        public static bool StringFilter(this object model,string filterStr)
        {
            if (string.IsNullOrEmpty(filterStr))
            {
                return false;
            }

            var modelType = model.GetType();
            if (modelType.IsClass) //先检查是否为类
            {
                foreach (var item in modelType.GetRuntimeProperties()) //只获取第一及的属性值
                {
                    try
                    {
                        if (item.PropertyType == typeof(Boolean))
                        {
                            if (((bool)item.GetValue(model)).ToString().Contains(filterStr)) return true;
                        }
                        else if (item.PropertyType == typeof(string))
                        {
                            var itemstring = (string)item.GetValue(model);
                            if (!string.IsNullOrEmpty(itemstring))
                            {
                                if (itemstring.Contains("深圳市"))
                                {

                                }
                                if (itemstring.Contains(filterStr)) return true;
                            }

                        }
                        else if (item.PropertyType == typeof(DateTime))
                        {
                            if (((DateTime)item.GetValue(model)).ToString().Contains(filterStr)) return true;
                        }
                        else if (item.PropertyType == typeof(int))
                        {
                            if (((int)item.GetValue(model)).ToString().Contains(filterStr)) return true;
                        }
                        else if (item.PropertyType == typeof(long))
                        {
                            if (((long)item.GetValue(model)).ToString().Contains(filterStr)) return true;
                        }
                        else if (item.PropertyType == typeof(short))
                        {
                            if (((short)item.GetValue(model)).ToString().Contains(filterStr)) return true;
                        }
                        else if (item.PropertyType == typeof(decimal))
                        {
                            if (((decimal)item.GetValue(model)).ToString().Contains(filterStr)) return true;
                        }
                        else if (item.PropertyType == typeof(double))
                        {
                            if (((int)item.GetValue(model)).ToString().Contains(filterStr)) return true;
                        }
                        else if (item.PropertyType == typeof(float))
                        {
                            if (((float)item.GetValue(model)).ToString().Contains(filterStr)) return true;
                        }
                        else if (item.PropertyType == typeof(Nullableint>))
                        {
                            if ((((Nullableint>)item.GetValue(model))).HasValue) if (((Nullableint>)item.GetValue(model)).ToString().Contains(filterStr)) return true;
                        }
                        else if (item.PropertyType == typeof(Nullablelong>))
                        {
                            if ((((Nullablelong>)item.GetValue(model))).HasValue) if (((Nullablelong>)item.GetValue(model)).ToString().Contains(filterStr)) return true;
                        }
                        else if (item.PropertyType == typeof(Nullableshort>))
                        {
                            if ((((Nullableshort>)item.GetValue(model))).HasValue) if (((Nullableshort>)item.GetValue(model)).ToString().Contains(filterStr)) return true;
                        }
                        else if (item.PropertyType == typeof(Nullabledecimal>))
                        {
                            if ((((Nullabledecimal>)item.GetValue(model))).HasValue) if (((Nullabledecimal>)item.GetValue(model)).ToString().Contains(filterStr)) return true;
                        }
                        else if (item.PropertyType == typeof(Nullablefloat>))
                        {
                            if ((((Nullablefloat>)item.GetValue(model))).HasValue) if (((Nullablefloat>)item.GetValue(model)).ToString().Contains(filterStr)) return true;
                        }
                        else if (item.PropertyType == typeof(Nullabledouble>))
                        {
                            if ((((Nullabledouble>)item.GetValue(model))).HasValue) if (((Nullabledouble>)item.GetValue(model)).ToString().Contains(filterStr)) return true;
                        }
                        else if (item.PropertyType.IsGenericType)
                        {
                            var list = item.PropertyType.GetInterface("IEnumerable", false);
                            if (list != null)
                            {
                                var listVal = item.GetValue(model) as IEnumerableobject>;
                                foreach (var listitem in listVal)
                                {
                                    if (listitem.StringFilter(filterStr)) return true;
                                }
                            }
                        }
                        else if (item.PropertyType.IsClass)
                        {
                            var subModel = item.GetValue(model);
                            if (subModel!=null)
                            {
                                if (subModel.StringFilter(filterStr)) return true;
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                   
                    }
                }
            }
            else if (modelType.IsGenericType) //检查是否为迭代器
            {
                var list = modelType.GetInterface("IEnumerable", false);
                if (list != null)
                {
                    var listVal = model as IEnumerableobject>;
                    foreach (var listitem in listVal)
                    {
                        if (listitem.StringFilter(filterStr)) return true;
                    }
                }
            }
            return false;
        }

 

C# 通过反射检查属性是否包含特定字符串

标签:exception   迭代   turn   model   for   反射   static   cat   col   

原文地址:https://www.cnblogs.com/Simplerjiang/p/12343188.html


评论


亲,登录后才可以留言!