2013-10-29 93 views
2

我有一個包含日期電話這樣的MethodCallExpression如何在沒有DynamicInvoke的情況下編譯MethodCallExpression?

DateTime.UtcNow.AddDays(-10); 

我想能夠編譯到它所代表的實際日期,但因爲我使用Xamarin和建設的iOS,由於AOT編譯限制,我無法使用DynamicInvoke()方法。

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(); 
} 

回答

1

所以,從我可以告訴一些研究後...有沒有辦法從ExpressionVisitor內進行編譯,僅僅是因爲它需要進行即時編譯,這在iOS上是不允許的。

我們的替代方案是接受這個作爲限制,並改變我們的查詢。

var date = DateTime.UtcNow.AddDays(-10); 
var actualExpression = TestExpression<UserModel>(u => u.CreatedDate == date); 

現在我們預編譯的代碼傳遞到表達式樹前。

0

據我所知 - 因爲動態代碼生成的iOS上limitations,你不能執行編譯。你唯一的選擇是某種解釋器(可能是PaxScript?)

更新:paxScript頁面表示代碼與Mono for Android兼容。嘗試與WinRT和WP7/8兼容的版本。這些平臺對iOS有類似的限制。

+0

對不起,其他庫添加不需要/不需要的膨脹。如果有一個庫可以實現,那麼可以在沒有庫的情況下完成。我只是在深入研究。 –

+0

寫一個口譯員本身就是一個項目。然而,你可能會裁剪你的方法來迎合你可能遇到的方法(這可能會簡化一些東西)。 – Ani

+0

是的,我認爲這正是需要做的。 –

相關問題