我收到我的iOS裝置上以下錯誤:使用LINQ排序依據在iOS
ExecutionEngineException:試圖JIT編譯方法「System.Linq.OrderedEnumerable
1<System.Collections.Generic.KeyValuePair
2>:的GetEnumerator() '而運行 - 只 - 只。
我使用的是Unity3D,我知道這個錯誤是由於LINQ表達式在編譯Unity到iOS時對排序值類型有問題導致的。因爲(我認爲)該表達式嘗試使用反射來實例化一個實現IComparer接口的新類型。這將適用於參考類型,但不適用於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);
我知道這是不相關的,但這是一個寫得很好的問題;你不僅解釋了你想要做的事情,而且還解釋了你的理由,假設和先前的方法。 +1艘遊艇。 – 2013-05-10 17:20:10
爲什麼不編寫你自己的OrderBy擴展方法並且解決LINQ的那部分問題呢?最糟糕的情況是,使用預集合的方法來避免這個關鍵部分中的工作值類型 – 2013-05-10 19:46:37
這就是我最終做的事,謝謝! – MichaelTaylor3D 2013-05-13 14:14:43