Consider the following code:
public enum SomeCode
{
NIF = 0
,NIE = 1
,CIF = 2
,PAS = 3
,NIN = 4
,SSN = 5
,OTH = 5
,UKN = 6
}
将
OTH = 5
更改为OTH = 7
是否会导致破坏性变更?
编辑:我从不存储int值,只存储枚举的文本表示。它可能在其他DLL中使用,但将使用相同的存储。
这是一个重大的变化,因为您正在更改公共API。
使用旧值构建的库/应用程序仍将保留旧值并使用它。 您需要重新编译它们全部。
来自MSDN-枚举(C#参考):
正如任何常量一样,枚举各个值的所有引用在编译时都会转换为数字字面值。 这可能会创建潜在的版本控制问题,如常量所述(C#编程指南)。
会的。假设您将一些数据作为枚举的int存储,将来检索数据将会给出错误的结果。对于这种情况,更改之前存储的OTH数据不会出现为OTH,因为您当前正在将5存储为OTH,而将来您将获得5,并且您需要相同的7。
虽然如果没有人依赖它的值为5,这不是一个破坏性的变化,但值得注意的是,任何使用它的人都依赖于它的值为5,即使在他们的代码中没有明确表示。
如果我像这样编写针对这个程序集的代码:
if(myVal == SomeCode.OTH)
{
//do something
}
然后在内部将其与5的值进行比较。尽管数字5在我的源代码中没有出现过,但如果我部署新版本的程序集,它将会崩溃。
好在我不需要重新编写来处理这种破坏性变化,只需要重新编译即可。
SomeCode someCode = (SomeCode)5
,这将是一个破坏性的变更。这要看情况。如果你可以验证没有人依赖于其值为5或与社会安全号码相同,或者你可以重构掉这样的依赖关系,那么它就是一个非破坏性的更改。