【发布时间】:2016-08-13 17:38:50
【问题描述】:
我在 iOS 设备上收到以下错误:
ExecutionEngineException:在使用 --aot-only 运行时尝试 JIT 编译方法 'System.Linq.OrderedEnumerable
1<System.Collections.Generic.KeyValuePair2>:GetEnumerator ()'。
我正在使用 Unity3D,并且我知道该错误是由于 LINQ 表达式在将 Unity 编译到 iOS 时存在排序值类型的问题。因为(我认为)表达式尝试使用反射来实例化实现 IComparer
所以我的想法是,既然我知道在这种情况下,我总是试图订购一个整数集合。我可以绕过通用的 ICompare
public class IntCompare : Comparer<int> {
public override int Compare (int x, int y)
{
return x - y;
}
}
但是,使用 OrderBy 仍然会给我错误。为什么我的方法不起作用,我有什么不明白的地方吗?
我的表情:
OptimizeMaxCommitList(members
.OrderBy((memberid) => memberid.Value, new IntCompare())
.Skip(1)
.ToDictionary(pair => pair.Key, pair => pair.Value)
,maxCommit);
【问题讨论】:
-
我知道这不相关,但这是一个写得很好的问题;你不仅解释了你想做什么,还解释了你的理由、假设和先前的方法。 +1 升船。
-
为什么不编写自己的 OrderBy 扩展方法并解决 LINQ 的那部分问题?最坏的情况是,使用集合的预装箱来避免在这个关键部分工作值类型
-
这正是我最终所做的,现在效果很好,谢谢!