为什么LambdaExpression.Compile()适用于iOS(Xamarin)?

Phi*_*ert 13 il ios xamarin

由于Xamarin.iOS在运行时不支持代码生成,为什么Compile()和DynamicInvoke()按预期工作?

例如,以下代码工作正常:

var lambda = Expression.Lambda(
                          Expression.Add(
                              Expression.Constant(1),
                              Expression.Constant(2)
                          )
             );

var f = lambda.Compile();
var result = f.DynamicInvoke();

// result==3 at this point
Run Code Online (Sandbox Code Playgroud)

Xamarin是否在运行时评估表达式树而不是发出IL代码?

svi*_*ick 13

在支持代码生成的平台上,LambdaCompiler使用基于Reflection.Emit的.

如果这是不可用,则表达式解释使用解释.例如,有些类可以解释ConstantAdd.

  • @NovaJoe,我相信你错了。您引用的文档明确指出“已知限制”下的 AOT *不*支持 `Expression.Compile`。 (2认同)