请考虑以下代码:
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中使用,但会使用相同的存储。
答案 0 :(得分:12)
这是一个重大变化,因为您正在更改公共API。
使用旧值构建的库/应用程序仍将保留旧值并使用它。您需要重新编译它们。
来自MSDN - enum (C# Reference):
与任何常量一样,对枚举的各个值的所有引用都在编译时转换为数字文字。这可能会产生潜在的版本控制问题,如常量(C#编程指南)中所述。
答案 1 :(得分:3)
这取决于您是否可以控制解决方案的完整代码,或者是否要导出其他人使用的库。
与公开暴露的争论有类似的陷阱。
一般来说,假设是 - 这是一个突破性的变化!
答案 2 :(得分:2)
会的。假设您将一些数据作为int存储在枚举中,将来检索数据会产生错误的结果。对于这种情况,在更改之前为OTH存储的数据将不会显示为OTH,因为您目前为OTH存储5个,并且您将来将获得5个,并且您需要7个相同的数据。
答案 3 :(得分:2)
如果没有人依赖它的值为5,那么它确实不是一个突破性的变化,值得注意的是,任何使用它的人都依赖它是5,即使它们的代码中没有明确的。
如果我针对这个程序集编写代码,如:
if(myVal == SomeCode.OTH)
{
//do something
}
然后在内部将它与值5进行比较。即使数字5没有出现在我的源代码中,所以如果我部署新版本的程序集,它将会中断。
节省的优点是我不需要重写来处理这个重大变化,只需重新编译。
答案 4 :(得分:0)
首先,SSN和OTH都是5,它是拼写错误,否则使用此枚举的switch语句的编译时错误?
现在,将OTH = 5更改为OTH = 7,如果将枚举用作SomeCode someCode = (SomeCode)5
,则会发生变化。
答案 5 :(得分:0)
这取决于。只有当您可以验证没有人依赖于其值为5或与SSN相同或者您是否可以重构这种依赖时,这是一个非破坏性的更改。