当前位置: 代码迷 >> 综合 >> [C#反射] 创建类/创建List /反射赋值/反射取值
  详细解决方案

[C#反射] 创建类/创建List /反射赋值/反射取值

热度:34   发布时间:2024-02-10 19:23:12.0
    /// <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;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;}obj.GetType().GetProperty(name).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;}}

 

  相关解决方案