反射中使用 BindingFlags.IgnoreCase

简介: 我们经常需要通过反射来调用目标对象的方法或获取/设置目标对象的属性,Type.InvokeMember 方法签名如下:    public object InvokeMember(string name,BindingFlags invokeAttr,Binder binder,  object target,object[] args,CultureInfo culture);         BindingFlags 有个枚举值是BindingFlags.IgnoreCase ,表示忽略name的大小。

    我们经常需要通过反射来调用目标对象的方法或获取/设置目标对象的属性,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 ) ;

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

目录
相关文章
|
3月前
|
存储 缓存
优美的使用反射,哪些场景推荐使用反射,哪些不推荐使用
优美的使用反射,哪些场景推荐使用反射,哪些不推荐使用
33 0
|
3月前
|
缓存 安全 Java
反射带来的问题
反射带来的问题
35 0
|
6月前
|
API C# 数据库
C#反射详解
C#反射详解
59 0
|
11月前
|
Java 数据库连接 数据库
JVAVEE反射
JVAVEE反射
51 0
|
安全 数据可视化 IDE
反射(二)什么是反射
反射(二)什么是反射
62 0
|
存储 Java 索引
反射理解
个人对反射的学习理解与代码
68 0
|
缓存 前端开发 JavaScript
一起来学反射(上)
一起来学反射
100 0
|
设计模式 安全 Java
一起来学反射(下)
一起来学反射
97 0
|
Java
简单理解下反射是啥
《基础系列》
103 0