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

hor*_*per 4 c# xamarin.ios ios

它说使用值类型作为字典键将"在设备上快速崩溃和烧毁",这是否意味着我不能使用像Dictionary <int,string>之类的东西来创建字符串查找表?

pou*_*pou 8

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

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

Apple不允许在设备上进行JIT(及时)编译.这意味着在部署到设备之前,必须预先编译所有内容(提前).这意味着MonoTouch存在一些限制,你不会使用.NET/Mono或Mono for Android.

一般为泛型生成的代码可以在不同类型之间共享.可悲的是,这是没有可能的值类型.这意味着AOT(提前)编译器必须为正在使用的每种值类型生成代码.

在某些情况下,AOT编译器可能无法检测运行时可能需要的每种可能类型.这将导致EngineExecutionException您指向违规代码.

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

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

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

这是否意味着我不能使用像Dictionary这样的东西来制作字符串查找表?

不,那会奏效.当您创建一个实例时,Dictionary<int, string>AOT编译器很容易知道需要生成哪些代码.

嵌套泛型或使用代码时(例如,带有值类型的LINQ查询可以生成此类代码)通常会出现问题.