1

这个标题是非常不言自明的。

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

我在一些测试项目中成功地做到了这一点,但在我去重构所有(我的意思是所有)我的代码(再次)之前,我需要知道我是否必须对在回退过程中创建的活页夹实例做同样的事情。

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”有其局限性。该限制是否也存在于活页夹内部,或者被认为是“运行时”和“安全”。

4

1 回答 1

0

好吧,经过一些测试。是的,它是安全的。在回退期间创建的 DynamicExpressions 不必转换为 CallSite<>。但是,应该注意原始表达式中的所有 DynamicExpressions 都可以。

于 2014-11-20T23:43:48.047 回答