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

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

反射中使用 BindingFlags.IgnoreCase的更多相关文章

  1. Go - 反射中 函数 和 方法 的调用 - v.Call()

    上一篇文章 说到了 Golang 中的反射的一些基本规则,重点就是文章中最后的三点,但是这篇文章并没有说如何在反射中调用函数和方法,这就是接下来要说的. 反射中调用 函数 众所周知,Golang 中的 ...

  2. golang 反射中调用方法

    反射中调用函数 众所周知,golang中的函数是可以像普通的int.float等类型变量那样作为值的,例如: package main import "fmt" func hell ...

  3. Java编程之反射中的注解详解

    "注解"这个词,可谓是在Java编程中出镜率比较高,而且也是一个老生常谈的话题.我们之前在聊Spring相关的东西时,注解是无处不在,之前我们简单的聊过一些"注解&quo ...

  4. 反射中的一个问题点:利用Method执行main方法特殊的地方

    利用Method执行main方法 问题: 启动Java程序的main方法的参数是一个字符串数组,即public static void main(String[] args),通过反射方式来调用这个m ...

  5. 015 反射中的 Class.forName() 与 ClassLoader.loadClass() 的区别

    作者:nnngu GitHub:https://github.com/nnngu 博客园:http://www.cnblogs.com/nnngu 简书:https://www.jianshu.com ...

  6. 回忆(一):反射中获得class对象的三种方法

    package reflex; /* * 反射:就是通过class文件对象 去使用该文件中的成员 * 变量,构造方法,成员方法. * * Person p = new Person(); p.使用 * ...

  7. 关于反射中获取Fields,method,Construts简单介绍

    * getFields()与getDeclaredFields()区别:getFields()只能访问类中声明为公有的字段,私有的字段它无法访问,能访问从其它类继承来的公有方法.getDeclared ...

  8. java反射中的动态代理机制(有实例)

    在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...

  9. 反射中的 Class.forName() 与 ClassLoader.loadClass() 的区别

    在Java中,类加载器把一个类加载进Java虚拟机中,要经过三个步骤来完成:加载.链接和初始化,其中链接又可以分成验证.准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下 ...

随机推荐

  1. java 之 对象与垃圾回收

    1.垃圾回收机制只负责回收堆内存中的对象,不会回收任何物理资源(如数据库连接,网络IO等资源) 2.程序无法精确控制垃圾回收的运行,垃圾回收会在合适的时候运行.当对象永久的失去引用后,系统会在合适的时 ...

  2. UVa 102 - Ecological Bin Packing(规律,统计)

    题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...

  3. MySQL 强制操作以及order by 使用

    我们以MySQL中常用的hint来进行详细的解析,如果你是经常使用Oracle的朋友可能知道,Oracle的hincvt功能种类很多,对于优化sql语句提供了很多方法. 同样,在MySQL里,也有类似 ...

  4. Sql Server 高频,高并发访问中的键查找死锁解析

    死锁对于DBA或是数据库开发人员而言并不陌生,它的引发多种多样,一般而言,数据库应用的开发者在设计时都会有一定的考量进而尽量避免死锁的产生.但有时因为一些特殊应用场景如高频查询,高并发查询下由于数据库 ...

  5. AngularJS的一点学习笔记

    ng-options="item.action for item in todos" ng-options表达式的基本形式, 形如 "<标签> for < ...

  6. freemarker如何遍历HashMap

    查询资料有以下两种方法: 1. <#if appMap?exists> <#list appMap?keys as key> key:${key} value:${appMap ...

  7. linux进程间通信-有名管道(FIFO)

    有名管道(FIFO) 命名管道也被称为FIFO文件,是一种特殊的文件.由于linux所有的事物都可以被视为文件,所以对命名管道的使用也就变得与文件操作非常统一. (1)创建命名管道 用如下两个函数中的 ...

  8. 记一次hadoop datanode进程问题分析

    症状:datanode进程还在,但是在web ui接口发现该节点已经被置为dead节点.监测datanode进程日志,开始时一直狂刷很忙,后来停止刷新日志. 分析datanode进程日志,发现如下一些 ...

  9. PAC学习框架

    PAC学习框架是机器学习的基础.它主要用来回答以下几个问题: 什么问题是可以高效学习的? 什么问题本质上就难以学习? 需要多少实例才能完成学习? 是否存在一个通用的学习模型? PAC=probably ...

  10. shell script 学习笔记-----if,for,while,case语句

    1.if内的判断条件为逻辑运算: 2.if内的判断条件为目录是否存在,文件是否存在,下图先检验目录/home/monster是否存在,然后再检测/home/monster中的file.txt文件是否存 ...