C# 在另一个DynamicExpression的回退中创建DynamicExpression安全吗?

C# 在另一个DynamicExpression的回退中创建DynamicExpression安全吗?,c#,.net,dynamic-language-runtime,language-implementation,C#,.net,Dynamic Language Runtime,Language Implementation,这个标题很容易解释 澄清一下:我已经使用动态表达式构建了一个相当完整的语言基础设施,并认为尝试输出程序集会很酷。任何有此经验的人都知道LambdaExpression.CompileToMethod需要将动态表达式转换为调用站点,并将其分配给表达式稍后可以访问的某个私有字段 我在一些测试项目中成功地做到了这一点,但在我开始重构所有代码之前,我需要知道我是否必须对回退过程中创建的绑定器实例执行同样的操作 protected override void FallbackInvoke(DynamicM

这个标题很容易解释

澄清一下:我已经使用动态表达式构建了一个相当完整的语言基础设施,并认为尝试输出程序集会很酷。任何有此经验的人都知道LambdaExpression.CompileToMethod需要将动态表达式转换为调用站点,并将其分配给表达式稍后可以访问的某个私有字段

我在一些测试项目中成功地做到了这一点,但在我开始重构所有代码之前,我需要知道我是否必须对回退过程中创建的绑定器实例执行同样的操作

protected override void FallbackInvoke(DynamicMetaObject target, DynamicMetaObject[] args, DynamicMetaObject errorSuggestion) { 
    // If I make a DynamicExpression here, does it need to be a CallSite<> ? 
    // Or since it's inside the context of an executing delegate (CallSite<>), 
    // is it considered "Live" ? 
} 

此外,在编译到方法时,使用Expression.Constant也有其局限性。这种限制是否也存在于活页夹中,或者被认为是运行时和安全的。

好吧,在一些测试之后。是的,它是安全的。在回退期间创建的DynamicExpression不必转换为CallSite。但是,应该注意的是,原始表达式中的所有DynamicExpression都不会