zhuweisky

君子之行,静以修身,俭以养德。非淡泊无以明志,非宁静无以致远。

ESFramework,基于.NET的通信框架。DataRabbit,轻量的数据访问框架。Strive,游戏引擎。sky.zhuwei@163.com
posts - 196, comments - 1329, trackbacks - 101, articles - 1
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

反射中使用 BindingFlags.IgnoreCase

Posted on 2006-07-26 11:38 zhuweisky 阅读(845) 评论(3)  编辑 收藏 网摘 所属分类: C#专栏
    我们经常需要通过反射来调用目标对象的方法或获取/设置目标对象的属性,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) ;
    
    如此,则可以忽略大小写来获取属性值了。

Feedback

#1楼    回复  引用    

2006-11-14 11:32 by 晃 [未注册用户]
终于发现BindingFlags.IgnoreCase 需要与BindingFlags.Public和BindingFlags.Instance联用才会产生效果。

为什么不看看帮助!!

#2楼    回复  引用    

2008-04-12 16:33 by 0cean [未注册用户]
那ignore Accents呢???讲解一下

#3楼    回复  引用  查看    

2008-10-09 15:57 by amingo      
thx for help




标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
Google站内搜索

相关文章:

相关链接: