我在iOS上制作Unity游戏。我知道AOT的局限性。当我添加一个碰巧有结构键类型的词典时,我得到了一连串的ExecutionEngineExceptions。其中大多数我可以通过虚拟声明来解决问题,使其对AOT编译器可见:
Dictionary<MyStruct,GameObject> dummy;
但最后一个错误是GenericEqualityComparer<MyStruct>
。我不能虚拟声明这一点,因为它在System.Collections.Generic命名空间中不公开。
我尝试了var dummy = EqualityComparer<MyStruct>.Default
,但这没有用。
我尝试创建自己的比较器class StructComparer : EqualityComparer<MyStruct>
并在字典构造函数中使用它,但是我从StructComparer构造函数调用堆栈中得到了相同的错误。
我真的不想将这个结构转换成一个类。有没有办法解决这个错误?
答案 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我相信。