【问题标题】:Will it be back compatible to change nullable type to non-nullable?将可空类型更改为不可空类型是否会向后兼容?
【发布时间】:2022-09-27 17:07:08
【问题描述】:

例如,如果我更改以下数据类型bool?

[ProtoMember(10)]
public bool? HasEmail { get; set; }

bool。这会是一个突破性的变化吗?

[ProtoMember(10)]
public bool HasEmail { get; set; }

编写HasEmail 的逻辑已更改为...?? false,因此将来它永远不会为空。

数据将存储在 Redis 中。而其他一些程序可能会尝试使用bool?bool 类型来读取它。

  • 只要您的数据中有空值,这确实是一个重大变化。如果其他东西写了一个空值(或者空值已经存在),那么你的新代码就会崩溃。但是如果这段代码是唯一的编写者,而其他应用程序只是读取,那么你很好:他们期待一个可能为空的值,它永远不会为空。
  • 此代码是唯一的编写器。它更新了分配HasEmail...?? false 的代码。我不确定 Redis 中的现有数据是否包含 null。也许我不应该在读者上将bool? 更改为bool

标签: c# protocol-buffers protobuf-net


【解决方案1】:

是的,这在前进方向上会很好;任何以前丢失的数据现在将通过省略报告为false。但是:您应该注意,如果您从新代码序列化数据,false 值将被省略,因此如果通过仍在使用旧版本的任何系统反序列化,则将报告为null(而不是false)。

【讨论】:

    猜你喜欢
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2021-12-08
    相关资源
    最近更新 更多