在DLL中想象这个枚举。

public enum Colors
{
    Red,
    Green
}
.

添加枚举值中断二进制兼容性吗?如果我要改变它,那么现有的exes休息?

public enum Colors
{
    Red,
    Green,
    Blue
}
.

我看到了这个答案,但它似乎解决了插入一个值的情况。如果我向添加值,则只有,那是好吗?

有帮助吗?

解决方案

否,这不会破坏二进制兼容性(如:组件仍将加载等),因为枚举基本上是整数的文字常量。在中间插入值显然是一个非常危险的想法,但你已经排除在外。

但是,它可能导致若干其他问题您需要防范:

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

其他提示

应该很好,假设你只附加到最后。然而,破坏的风险来自于枚举in隐含地定义的事实,从0开始。因此,如果有人持续到DB的值,则风险更改其映射到的值。

作为示例,如果您将枚举更改为:

public enum Colors
{
    Blue,
    Red,
    Green
}
.

在他们的dbs中存储这些值的任何人都会看到曾经是红色的东西,现在是蓝色的,而绿色现在是红色的。

理想情况下,您应该像:

一样定义枚举
public enum Colors
{
    Red = 0,
    Green = 1
}
.

然后,当您添加新的时,您应该有:

public enum Colors
{
    Red = 0,
    Green = 1,
    Blue = 2
}
.

这将有助于防止任何潜在的版本处理问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top