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 ); } }