gpt4 book ai didi

c# - 使用 Reflection.Emit 生成相互引用的类型

转载 作者:太空狗 更新时间:2023-10-29 21:27:38 25 4
gpt4 key购买 nike

<分区>

我想在运行时通过反射生成相互引用的类型。

使用静态代码我会这样做

public class Order
{
public int Id { get; set; }
public Customer Customer { get; set; }
}

public class Customer
{
public int Id { get; set; }
public Order Order { get; set; }
}

我可以使用值类型属性成功生成我的订单和我的 OrderDetails 类型。

代码是这样的

var aName = new System.Reflection.AssemblyName("DynamicAssembly");
var ab = AppDomain.CurrentDomain.DefineDynamicAssembly(
aName, System.Reflection.Emit.AssemblyBuilderAccess.Run);
var mb = ab.DefineDynamicModule(aName.Name);

var tb = mb.DefineType("Order",
System.Reflection.TypeAttributes.Public, typeof(Object));

var pbId = tb.DefineProperty("Id", PropertyAttributes.None, typeof(int), null);

现在我卡在了这一行:

var pbCustomer = tb.DefineProperty("Customer", PropertyAttributes.None, ???, null);

我需要将属性的类型传递给 DefineProperty 方法,但此时该类型不存在。现在我可以在此时为客户创建一个类型构建器并使用 tb.CreateType() 来获取类型,但这无济于事,因为客户也需要对 Order 的引用。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com