zoukankan      html  css  js  c++  java
  • 反射中使用 BindingFlags.IgnoreCase

    我们经常需要通过反射来调用目标对象的方法或获取/设置目标对象的属性,Type.InvokeMember 方法签名如下:
       

    public object InvokeMember(string name,BindingFlags invokeAttr,Binder binder,  object target,object[] args,CultureInfo culture);

        
        BindingFlags 有个枚举值是BindingFlags.IgnoreCase ,表示忽略name的大小。我在今天解决一个问题时,就需要用到BindingFlags.IgnoreCase。问题是这样的,我想根据数据库列的列名来通过反射从Entity对象中获取对应的属性值,大家知道,从Oracle数据库提取的列名全是大写的,而Entity中的属性名是使用的Pascal命名方法,如果不忽略属性名的大小写,则反射会失败。
        于是我像下面的方式获取属性:

    t.InvokeMember(para.SourceColumn , BindingFlags.IgnoreCase |BindingFlags.GetProperty ,null ,obj ,null) ;

        
        可是反射失败了!经过一段时间的尝试,终于发现BindingFlags.IgnoreCase 需要与BindingFlags.Public和BindingFlags.Instance联用才会产生效果。    

    t.InvokeMember(para.SourceColumn , BindingFlags.Public |BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.GetProperty ,null ,obj ,null) ;

        
        如此,则可以忽略大小写来获取属性值了。

  • 相关阅读:
    (转)php读写文件
    CentOS5.2下安装GCC4.1.2
    使用php模拟post提交数据
    Linux系统信息查看命令大全
    强制卸载MYSQL
    Php文件操作
    redhat linux上安装 gcc编译器
    centos5.2安装mysql6.0
    如何收缩数据库日志文件(ldf)
    浑沌的JSON,JS Object,JS Array
  • 原文地址:https://www.cnblogs.com/soundcode/p/4952028.html
Copyright © 2011-2022 走看看