反射(三)-------PropertyInfo

上篇博客中写了一下关于反射中Assembly类中的基础的用法,简单的总结一下,在Assembly类中核心还是通过反射得到的一个type,通过这个type,我们可以得到我们编译好的dll中想要的成员信息,比较类,事件,方法,参数,字段,属性等等,所有这些信息,都可以通过type来获得。

那么,这篇博客接着介绍一下反射中另一个常用的类PropertyInfo。看MSDN中它的层次关系:

第一篇博客中,就写到了关于反射中几个类的基本组成,提到了MemberInfo,成员类,这里包含了元素据中可能的所有成员类,PropertyInfo就属于其中一个。

其实对于PropertyInfo我们并不陌生,在机房重构中datatable向list进行转换时,就用到了它,当时用的时候,没怎么明白,现在回过头来,便知道为什么这样做了。

在这次做的模糊查询中,为了达到将指定字段下面的属性值,可以匹配成字符串形式,也是通过反射来达到目的的,以上二者细细比较,才发现原理相同,datatable to list中需要给list的实体的属性赋值,所以要用到pro.SetValue的方法,而模糊查询只需要读取值,因此,只用getValue便可解决问题。

拼接字符串的方法:

 public StringBuilder GetLikeStr<T>(List<T> listObject, string[] results)
        {
            StringBuilder sb = new StringBuilder();
            if (listObject.Count != 0)
            {

                for (int i = 0; i < listObject.Count; i++)
                {
                    var item = listObject.ElementAt(i);

                    for (int j = 0; j < results.Length; j++)
                    {
                        System.Reflection.PropertyInfo pi = item.GetType().GetProperty(results[j]);
                        string queryCondition = pi.GetValue(item, null).ToString();
                        sb.Append(queryCondition).Append(",");
                    }
                }

                sb.Remove(sb.Length - 1, 1);

            }
            return sb;

        }
再拿这段代码和原来写的做个比较,才发现很熟悉。

在UI系统中解析dll时,开始自己总是认为,可以用assembly中的获取GetProperties这个方法来解析,但仔细想来,这里为了控制界面,需要获取自定义的属性,所以这里用到的是另外的一个属性类Attribute,查msdn才发现,原来这两个原来不同宗呀。以后再慢慢学习这个部分吧。想了解更多关于反射的知识,还是应该多看看帮助手册呀!

你可能感兴趣的:(反射(三)-------PropertyInfo)