菜鸟教程小白 发表于 2022-12-12 16:01:34

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 == &#34;DateTime&#34;)
{
    // Can&#39;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&lt;UserModel&gt;( u =&gt; 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]
查看完整版本: c# - 如何在没有 DynamicInvoke 的情况下编译 MethodCallExpression?