如何修复Unity中struct的GenericEqualityComparer的AOT ExecutionEngineException

时间:2014-12-12 11:09:48

标签: c# unity3d mono

我在iOS上制作Unity游戏。我知道AOT的局限性。当我添加一个碰巧有结构键类型的词典时,我得到了一连串的ExecutionEngineExceptions。其中大多数我可以通过虚拟声明来解决问题,使其对AOT编译器可见:

Dictionary<MyStruct,GameObject> dummy;

但最后一个错误是GenericEqualityComparer<MyStruct>。我不能虚拟声明这一点,因为它在System.Collections.Generic命名空间中不公开。

我尝试了var dummy = EqualityComparer<MyStruct>.Default,但这没有用。

我尝试创建自己的比较器class StructComparer : EqualityComparer<MyStruct>并在字典构造函数中使用它,但是我从StructComparer构造函数调用堆栈中得到了相同的错误。

我真的不想将这个结构转换成一个类。有没有办法解决这个错误?

1 个答案:

答案 0 :(得分:1)

我相信这个Value types as Dictionary Keys limitations解决方法应该是您所需要的:

“以新类型手动实现IEqualityComparer接口,并向Dictionary(IEqualityComparer)构造函数提供该类型的实例。”

即,你需要一个实现IEqualityComparer的类,然后将它的一个实例传递给Dictionary构造函数。

可爱的是,它会出现someone made a patch(不确定它是否合并)来修复Mono 2.8+中的这个AOT错误。但是,这对Unity用户没有帮助,因为开发人员仍在使用2.6.5我相信。