在另一个DynamicExpression的回退中创建DynamicExpression是否安全?

时间:2014-11-17 01:22:14

标签: c# .net dynamic-language-runtime language-implementation

这个标题非常自我解释。

澄清一下:我使用动态表达式构建了一个非常完整的语言基础架构,并认为尝试输出程序集会很酷。任何有这方面经验的人都知道" LambdaExpression.CompileToMethod"需要将动态表达式转换为CallSite<>并将其分配给您的表达式稍后可以访问的某个私有字段。

我在一些测试项目中成功地做到了这一点,但在我去重构所有(我的意思是全部)我的代码(再次)之前,我需要知道我是否必须对在此期间创建的binder实例执行相同的操作。后退过程。

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" ? 
} 

另外,使用&#34; Expression.Constant&#34;在编译方法时有它的局限性。这种限制是否也存在于绑定器内部或被认为是&#34;运行时&#34;和&#34;安全&#34;。

1 个答案:

答案 0 :(得分:0)

嗯,经过一些测试。是的,这是安全的。在回退期间创建的DynamicExpressions不必转换为CallSite&lt;&gt;。但是,应该注意原始表达式中的所有DynamicExpressions都可以。