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());
}
{
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);
}
{
return Assembly.Load(assembly).CreateInstance(className);
}
获取指定属性
![](https://i-blog.csdnimg.cn/blog_migrate/81178cc93a2a3bb5048d90d76e7ec935.gif)
public
static
PropertyInfo GetPropertyByName(Type type,
string
propertyName)
{
return type.GetProperty(propertyName, BindingFlags.Public
| BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.GetProperty | BindingFlags.FlattenHierarchy);
}
{
return type.GetProperty(propertyName, BindingFlags.Public
| BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.GetProperty | BindingFlags.FlattenHierarchy);
}
反射创建泛型集合
![](https://i-blog.csdnimg.cn/blog_migrate/81178cc93a2a3bb5048d90d76e7ec935.gif)
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 type = listType;
// 反射创建普通对象
object o = Activator.CreateInstance(listType);
// 反射创建泛型集合
Type generic = typeof (List <> );
Type[] typeArgs = { listType };
generic = generic.MakeGenericType(typeArgs);
return Activator.CreateInstance(generic) as IList;
}
反射调用方法
![](https://i-blog.csdnimg.cn/blog_migrate/81178cc93a2a3bb5048d90d76e7ec935.gif)
Type dataType
=
Type.GetType(ClassName);
MethodInfo parseMethod = dataType.GetMethod( " Parse " , BindingFlags.Public | BindingFlags.IgnoreCase
| BindingFlags.Static | BindingFlags.FlattenHierarchy, null , new Type[] { typeof ( string ) }, null );
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);
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 );
}
}
{
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 );
}
}