它说使用值类型作为字典键会“在设备上快速崩溃和烧毁”,这是否意味着我不能使用像Dictionary< int,string>这样的东西。制作字符串查找表?
答案 0 :(得分:8)
它说使用值类型作为字典键会“在设备上快速崩溃和烧毁”,
它不是那么戏剧性(没有燃烧)或者是自动的 - 但它可能会发生。
Apple不允许在设备上进行JIT(及时)编译。这意味着在部署到设备之前,必须预先编译所有内容(提前)。这意味着MonoTouch存在少量limitations,而你不会使用.NET / Mono或Mono for Android。
在 general 中,可以在不同类型之间共享生成的泛型代码。遗憾的是,值类型可能 。这意味着AOT(提前)编译器必须为正在使用的每种值类型生成代码。
在某些情况下,AOT编译器可能无法检测运行时可能所需的每种可能类型。这将导致EngineExecutionException
指向违规代码。
在此阶段,您可以尝试:
提示需要代码的AOT编译器(即添加一些代码,使AOT编译器生成所需的丢失代码);或
重构代码,例如避免价值类型;
这是否意味着我不能使用像Dictionary这样的东西来制作字符串查找表?
不,那会奏效。当您创建Dictionary<int, string>
的实例时,AOT编译器很容易知道需要生成哪些代码。
嵌套泛型或使用代码时(例如,带有值类型的LINQ查询可以生成此类代码)通常会出现问题。