c# 反射创建list 动态实体类 例子

动态 未结 0 104
小小草
小小草 LV1 2023年9月23日 23:40 发表
以下是一个使用反射创建 List 类型的动态实体类的示例: ``` using System; using System.Collections.Generic; using System.Reflection; using System.Reflection.Emit; class Program { static void Main(string[] args) { TypeBuilder typeBuilder = CreateDynamicType(); Type entityType = typeBuilder.CreateType(); Type listType = typeof(List<>); Type genericListType = listType.MakeGenericType(entityType); ConstructorInfo constructor = genericListType.GetConstructor(Type.EmptyTypes); object obj = constructor.Invoke(null); IList myList = (IList)obj; object entity1 = Activator.CreateInstance(entityType); PropertyInfo property1 = entityType.GetProperty("Id"); property1.SetValue(entity1, 1); object entity2 = Activator.CreateInstance(entityType); PropertyInfo property2 = entityType.GetProperty("Name"); property2.SetValue(entity2, "John"); myList.Add(entity1); myList.Add(entity2); foreach (object item in myList) { Console.WriteLine(item); } } static TypeBuilder CreateDynamicType() { AssemblyName assemblyName = new AssemblyName("DynamicAssembly"); AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run); ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("DynamicModule"); TypeBuilder typeBuilder = moduleBuilder.DefineType("MyClass", TypeAttributes.Public); typeBuilder.DefineField("id", typeof(int), FieldAttributes.Private); typeBuilder.DefineField("name", typeof(string), FieldAttributes.Private); PropertyBuilder propertyBuilder1 = typeBuilder.DefineProperty("Id", PropertyAttributes.None, typeof(int), null); MethodBuilder getterBuilder1 = typeBuilder.DefineMethod("get_Id", MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig, typeof(int), Type.EmptyTypes); ILGenerator ilGenerator1 = getterBuilder1.GetILGenerator(); ilGenerator1.Emit(OpCodes.Ldarg_0); ilGenerator1.Emit(OpCodes.Ldfld, typeBuilder.GetField("id", BindingFlags.NonPublic | BindingFlags.Instance)); ilGenerator1.Emit(OpCodes.Ret); propertyBuilder1.SetGetMethod(getterBuilder1); PropertyBuilder propertyBuilder2 = typeBuilder.DefineProperty("Name", PropertyAttributes.None, typeof(string), null); MethodBuilder getterBuilder2 =
收藏(0)  分享
相关标签: 智能问答
问题没解决?让AI助手帮你作答 AI助手
0个回复
  • 消灭零回复