使用LINQ的设备上的Monotouch JIT错误

Kro*_*oan 2 linq iphone jit xamarin.ios aot

我试图通过MonoTouch中的Debug | iPhone选项在iOS设备上运行我们的应用程序.然而,我们遇到了一个很快的问题.应用程序崩溃时出现以下异常

Attempting to JIT compile method "System.Linq.Enumerable:<FirstOfDefault`1>m_13<int> (int)" while running with aot-only.
Run Code Online (Sandbox Code Playgroud)

现在我明白这个问题来自通用部分是JIT,在实际的iOS设备上是不允许的.我无法找到的是如何解决它.

下面是崩溃的代码:

int nextTag = (from tag in _cellControllers.Keys
    where tag > currentTag
    select tag).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

_cellControllers是一个

Dictionary <int, UITableViewSource>
Run Code Online (Sandbox Code Playgroud)

如何防止此错误发生?

Rol*_*nge 5

这个问题是有值类型作为字典键,如记录在这里.将字典更改为没有值类型作为键可能会使这种情况起作用(不幸的是在某些情况下LINQ将自己使用字典,在这种情况下,它将需要重写查询).

我们正在努力在使用LINQ时修复这些问题,因此我还建议使用可编译的测试用例提交错误,以便我们确保您的案例在将来有效.