我在 iOS 设备上收到以下错误:
1<System.Collections.Generic.KeyValuePair
ExecutionEngineException:在使用 --aot-only 运行时尝试 JIT 编译方法“System.Linq.OrderedEnumerable 2>:GetEnumerator ()”。
我正在使用 Unity3D,我知道该错误是因为 LINQ 表达式在将 Unity 编译到 iOS 时存在排序值类型的问题。因为(我认为)表达式试图使用反射来实例化实现 IComparer<TKey> 接口的新类型。这适用于引用类型,但不适用于 Unity iOS 构建中的值类型。
所以我的想法是,既然我知道在这种情况下,我总是试图订购一个整数集合。我可以绕过通用 ICompare<TKey> 并创建自己的自定义比较器。
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);