c# - 如何在没有 DynamicInvoke 的情况下编译 MethodCallExpression?
<p><p>我有一个 <code>MethodCallExpression</code>,其中包含这样的日期调用</p>
<pre><code>DateTime.UtcNow.AddDays(-10);
</code></pre>
<p>我希望能够将它编译成它所代表的实际日期,但是因为我使用的是 Xamarin,并且是为 iOS 构建的,所以由于 AOT 编译限制,我不能使用 DynamicInvoke() 方法。 </p>
<pre><code>var expression = MyExpression;
if (expression.Type.Name == "DateTime")
{
// Can't do this. Even though it works in most cases
string result = Expression.Lambda( expression ).Compile().DynamicInvoke();
}
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>所以,根据我的一些研究,我可以告诉...没有办法从 ExpressionVisitor 中进行编译,仅仅是因为它需要即时编译,这在 iOS 上是不允许的。 </p>
<p>我们的替代方案是接受此限制,并更改我们的查询。</p>
<pre><code>var date = DateTime.UtcNow.AddDays(-10);
var actualExpression = TestExpression<UserModel>( u => u.CreatedDate == date );
</code></pre>
<p>现在我们在将代码传递到表达式树之前对其进行预编译。</p></p>
<p style="font-size: 20px;">关于c# - 如何在没有 DynamicInvoke 的情况下编译 MethodCallExpression?,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/19666257/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/19666257/
</a>
</p>
页:
[1]