【发布时间】:2023-03-12 15:49:02
【问题描述】:
它说使用值类型作为字典键会“在设备上很快崩溃和烧毁”,这是否意味着我不能使用 Dictionary
【问题讨论】:
标签: c# ios xamarin.ios
它说使用值类型作为字典键会“在设备上很快崩溃和烧毁”,这是否意味着我不能使用 Dictionary
【问题讨论】:
标签: c# ios xamarin.ios
它说使用值类型作为字典键将“在设备上很快崩溃和烧毁”,
这不是那么戏剧性(没有燃烧)或那么自动 - 但它可能会发生。
Apple 不允许在设备上进行 JIT(即时)编译。这意味着在部署到设备之前,必须(提前)预编译所有内容。这意味着存在一些用于 MonoTouch 的 limitations,而 .NET / Mono 或 Mono 用于 Android。
在general中,生成的泛型代码可以在不同类型之间共享。遗憾的是,值类型不可能。这意味着 AOT(提前)编译器必须为正在使用的每种值类型生成代码。
在某些情况下,AOT 编译器可能无法检测到在运行时可能需要的所有可能类型。这将导致EngineExecutionException 将您指向有问题的代码。
在这个阶段你可以尝试:
提示需要代码的 AOT 编译器(即添加一些代码,使 AOT 编译器生成所需的缺失代码);或
重构代码,例如避免值类型;
这是否意味着我不能使用 Dictionary 之类的东西来制作字符串查找表?
不,这会起作用。当您创建Dictionary<int, string> 的实例时,AOT 编译器很容易知道需要生成哪些代码。
嵌套泛型或使用嵌套泛型的代码时通常会出现问题(例如,具有值类型的 LINQ 查询可以生成此类代码)。
【讨论】: