/// <summary>
/// 创建一个类
/// </summary>
/// <param name="name">类名</param>
/// <returns></returns>
public static object CreateClass(string name){
try
{
//获取已加载到此应用程序域的执行上下文中的程序集
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
Type type = null;
//遍历查找传入的类名
foreach (Assembly assembly in assemblies)
{
type = assembly.GetType(name);
if(type != null){
break;
}
}
if(type != null){
//反射创建类
return Activator.CreateInstance(type);
}
}
catch (System.Exception)
{
Debug.LogError("CreateClass 创建失败 name:"+name);
}
return null;
}
/// <summary>
/// 创建List
/// </summary>
/// <param name="type">泛型类型</param>
/// <returns></returns>
public static object CreateList(Type type){
Type listType = typeof(List<>);
//指定泛型的具体类型
Type newType = listType.MakeGenericType(new Type[]{type});
//创建一个list返回
return Activator.CreateInstance(newType,new object[]{});
}
/// <summary>
/// 通过反射赋值
/// </summary>
/// <param name="obj">需要赋值的类</param>
/// <param name="name">赋值的字段名</param>
/// <param name="type">字段类型</param>
/// <param name="value">值</param>
public static void SetMemberValue(object obj,string name,string type,string value){
object val = null;
PropertyInfo info = obj.GetType().GetProperty(name);
switch (type)
{
case "int":
val = Convert.ToInt32(value);
break;
case "float":
val = Convert.ToSingle(value);
break;
case "bool":
val = Convert.ToBoolean(value);
break;
case "string":
val = value;
break;
case "enum":
val = TypeDescriptor.GetConverter(info.PropertyType).ConvertFromInvariantString(value.ToString());
break;
}
info.SetValue(obj,val);
}
/// <summary>
/// 通过反射获得值
/// </summary>
/// <param name="obj"></param>
/// <param name="name"></param>
/// <param name="flags"></param>
/// <returns></returns>
public static object GetMemberValue(object obj,string name,BindingFlags flags =
BindingFlags.Instance|BindingFlags.Public|BindingFlags.Static){
Type type = obj.GetType();
MemberInfo[] infos = type.GetMember(name,flags);
switch(infos[0].MemberType){
case MemberTypes.Field:
return type.GetField(name,flags).GetValue(obj);//获取字段value值
case MemberTypes.Property:
return type.GetProperty(name,flags).GetValue(obj);//获取字段value值
default:
return null;
}
}