MonoTouch:关于值类型作为字典键

本文关键字:字典 类型 于值 MonoTouch | 更新日期: 2023-09-27 17:53:39

它说使用值类型作为字典键会"在设备上很快崩溃和烧坏",这是否意味着我不能使用像Dictionary<int,>创建一个字符串查找表?

MonoTouch:关于值类型作为字典键

它说使用值类型作为字典键会"在设备上很快崩溃和烧毁",

这不是那么戏剧性(没有燃烧)或自动-但它可能发生。

Apple不允许在设备上进行JIT (just in time)编译。这意味着在部署到设备之前,所有内容都必须预先编译(提前)。这意味着MonoTouch存在一些你在。net/Mono或Mono for Android中所没有的限制。

general中,为泛型生成的代码可以在不同类型之间共享。遗憾的是,对于值类型不能。这意味着AOT(提前)编译器必须为使用的每个值类型生成代码。

在某些情况下,AOT编译器可能无法检测到运行时可能需要的的所有可能类型。这将导致一个EngineExecutionException,它将指向有问题的代码。

在这个阶段,您可以尝试:

  • 提示AOT编译器需要的代码(即添加一些代码,使AOT编译器生成所需的缺失代码);或者

  • 重构代码,例如避免值类型;

这是否意味着我不能使用字典之类的东西来创建字符串查找表?

不,那样就行了。当您创建Dictionary<int, string>的实例时,AOT编译器很容易知道需要生成什么代码。

问题通常发生在嵌套泛型或使用嵌套泛型的代码时(例如,具有值类型的LINQ查询可以生成这样的代码)。