添加枚举值是否会破坏二进制兼容性?

The*_*Saw 13 c# enums binary-compatibility

想象一下DLL中的这个枚举.

public enum Colors
{
    Red,
    Green
}
Run Code Online (Sandbox Code Playgroud)

添加枚举值是否会破坏二进制兼容性?如果我要更改它,现有的EXE会破坏吗?

public enum Colors
{
    Red,
    Green,
    Blue
}
Run Code Online (Sandbox Code Playgroud)

我看到了这个答案,但它似乎解决了插入值的问题.如果我只在最后添加值,那可以吗?

Mar*_*ell 18

不,这不会破坏二进制兼容性(尽可能多:程序集仍会加载等),因为枚举基本上是整数文字常量.在中间插入值显然是一个非常危险的想法,但你已经排除了这一点.

但是,它可能会导致您需要防范的许多其他问题:

  • 某些代码(switch特别是语句)可能无法预测新值; 从技术上讲,这也是一个问题,因为枚举没有经过值检查(枚举变量可以包含未定义的值)
  • 查询可用枚举的任何内容都会得到不同的结果
    • 特别是,如果存在使用特定客户端尚未预期的枚举的数据,则序列化和反序列化可能会意外失败