反射常用功能-持续更新

    技术2025-06-06  73

    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)