以下是一个使用反射创建 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 =