我想动态创建泛型类。要定义类型参数,您将在DefineGenericParameters
上调用TypeBuilder
方法,并可以使用返回值在类型参数上添加类型约束。
顺便说一句,我正在使用表达式树来发出方法主体。但是后来我意识到,表达式树的API不接受GenericTypeParameterBuilder
方法的返回值DefineGenericParameters
作为参数。
也许您想知道它是否可以编译。因为类型是从Type
派生的,所以它将进行编译。但是表达式树的API在运行时会引发异常,告诉我该类型在Mono上包含通用类型参数,而.NET不支持该方法。
所以在我看来,表达式树无法处理泛型类型参数,但事实确实如此吗?我想念什么吗?
如果是这样,如果您建议使用表达式树处理通用类型参数的其他方法,我将很高兴。
答案 0 :(得分:0)
.NET不支持该方法。
这我可以解释:
要检查类型是否为枚举,请在https://www.shimara.com行的末尾调用:
public override bool IsSubclassOf(Type c)
{
throw new NotSupportedException();
}
通过this行:
public virtual bool IsEnum {
get
{
return IsSubclassOf(RuntimeType.EnumType);
}
由this行调用的:
internal static ParameterExpression Make(Type type, string name, bool isByRef) {
if (isByRef) {
return new ByRefParameterExpression(type, name);
} else {
if (!type.IsEnum) {
现在...关于您的问题:不能做。不幸的是,这两个子系统(Reflection.Emit
和Expression
)并没有太多的“兼容”。如您所知,不支持使用LambaExpression.CompileToMethod()
创建实例方法(包括构造函数)。您唯一可以做的就是创建普通的(非泛型)静态方法,该方法不包含在其参数中使用TypeBuilder
构建的类型。