在 Reflection.Emit 中创建 IEnumerable 属性

IEnumerable property creation in Reflection.Emit

我正在尝试使用 Reflection.Emit.

创建 IEnumerable<AnotherDynamicType> 类型的 属性

我有一个辅助方法可以很好地添加属性,接受类型作为输入:

public void AddProperty(TypeBuilder typeBuilder, string propertyName, Type type) 
{
    ....
}

可以这样调用:

AddProperty(typeBuilder,"MyPropertyName",typeof(string));

但是现在我想在 class 中添加一个 属性:

public IEnumerable<AnotherDynamicType> MyList {get;set;}

如果目标 AnotherDynamicType 也是动态创建的,我如何为调用定义此 属性 的 "Type"?

以下不编译:

AddProperty(typeBuilder,"MyPropertyName",typeof(IEnumerable<typeof(anotherDynamicType)>));

您可以使用 Type.MakeGenericType:

var anotherTypeEnumerable = typeof(IEnumerable<>)
                            .MakeGenericType(anotherDynamicType);