反射常用功能-持续更新

http://www.cnblogs.com/mextb1860/archive/2011/02/12/1952756.html

 

反射判断 某个对象 是否 是泛型集合的类型

  public   bool  isCollection( object  o) 
    { 
        
return   typeof (ICollection).IsAssignableFrom(o.GetType()) 
            
||   typeof (ICollection <> ).IsAssignableFrom(o.GetType()); 
    } 

 获取类实例

         public   static   object  Load( string  assembly,  string  className)
        {
            
return  Assembly.Load(assembly).CreateInstance(className);
        }

 

获取指定属性

代码
         public   static  PropertyInfo GetPropertyByName(Type type,  string  propertyName)
        {
            
return  type.GetProperty(propertyName, BindingFlags.Public
                
|  BindingFlags.IgnoreCase  |  BindingFlags.Instance  |  BindingFlags.GetProperty  |  BindingFlags.FlattenHierarchy);
        }

 

 反射创建泛型集合

代码
         public   static  IList CreateList(Type listType)
        {
            
// Type type = listType;
            
// 反射创建普通对象
             object  o  =  Activator.CreateInstance(listType);
            
// 反射创建泛型集合
            Type generic  =   typeof (List <> );
            Type[] typeArgs 
=  { listType };
            generic 
=  generic.MakeGenericType(typeArgs);
            
return  Activator.CreateInstance(generic)  as  IList;
        }

 

反射调用方法

代码
                    Type dataType  =  Type.GetType(ClassName);
                    MethodInfo parseMethod 
=  dataType.GetMethod( " Parse " , BindingFlags.Public  |  BindingFlags.IgnoreCase
                        
|  BindingFlags.Static  |  BindingFlags.FlattenHierarchy,  null new  Type[] {  typeof ( string ) },  null );

 反射获取某个属性集合(如获取DataTable的columns属性,并且遍历它)

 

                DataTable dtSource = (DataTable)data;
                Type type 
= dtSource.GetType();
                PropertyInfo pi 
= type.GetProperty("Columns");
                IEnumerable listObject 
= (IEnumerable)pi.GetValue(dtSource, null); 

 反射设置属性

         public   static   void  SetPropertyValue( this  PropertyInfo property,  object  target,  object  value)
        {
            
if  ( null   !=  property  &&  property.CanWrite)
            {
                
if  (value.GetType()  ==   typeof ( string ))
                {
                    
//  对换行符进行转换
                    value  =  value.ToString().Replace( " //r " " /r " ).
                        Replace(
" //n " " /n " ).Replace( " <br> " " /n " );
                }
                value 
=  GetObjectInstance(property.PropertyType, value.ToString());
                property.SetValue(target, value, 
null );
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值