C# 不';t表达式树是否支持动态泛型类型参数?

C# 不';t表达式树是否支持动态泛型类型参数?,c#,generics,dynamic,expression-trees,C#,Generics,Dynamic,Expression Trees,我想动态创建泛型类。要定义类型参数,您将调用TypeBuilders上的DefineGenericParameters方法,并且可以使用返回值在类型参数上添加类型约束 顺便说一下,我使用表达式树来发出方法体。但后来我意识到表达式树的API不接受GenericTypeParameterBuilders作为参数,后者是DefineGenericParameters方法的返回值。 也许你想知道它是否会编译。因为类型是从type派生的,所以它将编译。但是Expression Tree的API在运行时抛出

我想动态创建泛型类。要定义类型参数,您将调用
TypeBuilder
s上的
DefineGenericParameters
方法,并且可以使用返回值在类型参数上添加类型约束

顺便说一下,我使用表达式树来发出方法体。但后来我意识到表达式树的API不接受
GenericTypeParameterBuilder
s作为参数,后者是
DefineGenericParameters
方法的返回值。
也许你想知道它是否会编译。因为类型是从
type
派生的,所以它将编译。但是Expression Tree的API在运行时抛出异常,告诉我该类型在Mono上包含泛型类型参数,并且该方法在.NET上不受支持

所以在我看来,表达式树不能处理泛型类型参数,但真的是这样吗?我错过什么了吗?
如果是这样,如果您建议使用表达式树处理泛型类型参数的其他方法,我将非常高兴

该方法在.NET上不受支持

我可以解释这一点:

要检查该类型是否为枚举,请调用结束行中的:

public override bool IsSubclassOf(Type c)
{
    throw new NotSupportedException();
}
按行:

这被称为行:


现在。。。关于你的问题:不行。遗憾的是,这两个子系统(
Reflection.Emit
Expression
)并不太“兼容”。正如您所知,不支持使用
LambaExpression.CompileToMethod()
创建实例方法(包括构造函数)。您唯一能做的就是创建普通(非泛型)静态方法,这些方法的参数中不包含使用
TypeBuilder
构造的类型。

Expression
树在处理新类时受到严重限制。我甚至不知道你是否能创建“普通”的实例方法。。。我会说答案是肯定的和否定的。您可以使用
LambdaExpression.CompileToMethod
发出静态方法。但因为它只发出静态方法,所以如果你发出实例方法,你需要一个技巧。。。正如您现在看到的,表达式树并不是补充
TypeBuilder
的好工具。。。为那些想深入CLR的人叹息…:-(事实上,这个答案正是我所期望的。我只是不确定我是否正确。非常感谢。
 public virtual bool IsEnum {
     get
     {
        return IsSubclassOf(RuntimeType.EnumType);
     }
internal static ParameterExpression Make(Type type, string name, bool isByRef) {
    if (isByRef) {
        return new ByRefParameterExpression(type, name);
    } else {
        if (!type.IsEnum) {