MonoTouch:关于值类型作为字典键
本文关键字:字典 类型 于值 MonoTouch | 更新日期: 2023-09-27 17:53:39
它说使用值类型作为字典键会"在设备上很快崩溃和烧坏",这是否意味着我不能使用像Dictionary<int,>创建一个字符串查找表?
它说使用值类型作为字典键会"在设备上很快崩溃和烧毁",
这不是那么戏剧性(没有燃烧)或自动-但它可能发生。
Apple不允许在设备上进行JIT (just in time)编译。这意味着在部署到设备之前,所有内容都必须预先编译(提前)。这意味着MonoTouch存在一些你在。net/Mono或Mono for Android中所没有的限制。
在general中,为泛型生成的代码可以在不同类型之间共享。遗憾的是,对于值类型, 不能。这意味着AOT(提前)编译器必须为使用的每个值类型生成代码。
在某些情况下,AOT编译器可能无法检测到运行时可能需要的的所有可能类型。这将导致一个EngineExecutionException
,它将指向有问题的代码。
在这个阶段,您可以尝试:
提示AOT编译器需要的代码(即添加一些代码,使AOT编译器生成所需的缺失代码);或者
重构代码,例如避免值类型;
这是否意味着我不能使用字典之类的东西来创建字符串查找表?
不,那样就行了。当您创建Dictionary<int, string>
的实例时,AOT编译器很容易知道需要生成什么代码。
问题通常发生在嵌套泛型或使用嵌套泛型的代码时(例如,具有值类型的LINQ查询可以生成这样的代码)。