【问题标题】:MonoTouch: About value types as Dictionary KeysMonoTouch:关于作为字典键的值类型
【发布时间】:2023-03-12 15:49:02
【问题描述】:

它说使用值类型作为字典键会“在设备上很快崩溃和烧毁”,这是否意味着我不能使用 Dictionary 之类的东西来制作字符串查找表?

【问题讨论】:

    标签: c# ios xamarin.ios


    【解决方案1】:

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

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

    Apple 不允许在设备上进行 JIT(即时)编译。这意味着在部署到设备之前,必须(提前)预编译所有内容。这意味着存在一些用于 MonoTouch 的 limitations,而 .NET / Mono 或 Mono 用于 Android。

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

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

    在这个阶段你可以尝试:

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

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

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

    不,这会起作用。当您创建Dictionary<int, string> 的实例时,AOT 编译器很容易知道需要生成哪些代码。

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

    【讨论】:

    • 哇!你就像一个专业人士!非常感谢!
    猜你喜欢
    • 2014-11-20
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 2016-09-26
    • 2013-12-03
    相关资源
    最近更新 更多