考虑下面的代码:正在改变一个枚举的突破变化的数量?
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,但将使用相同的存储。
考虑下面的代码:正在改变一个枚举的突破变化的数量?
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 - enum (C# Reference):
正如任何常量,以枚举的单独的值均引用在编译时转换为数字文字。这可能会产生潜在的版本问题,如常量(C#编程指南)中所述。
这取决于您是否拥有对解决方案的完整代码的控制权,或者您是否在导出供他人使用的库。
有与公开曝光consts类似的陷阱。
一般来说,假设是 - 这是一个突破!
即使你是唯一的消费者,它仍然可能是一个突破性的改变。如果代码中的任何地方在int值之间进行投票以获取枚举值,则可能导致异常或(更糟糕)返回错误的值。例如,通过使用表的主键作为枚举的值,将数据库中的值映射到枚举并不少见。 – 2010-08-06 08:48:51
它会的。假设您将一些数据存储为枚举中的int,将来检索数据会给出错误的结果。对于这种情况,在更改之前为OTH存储的数据不会像OTH那样存储OTH,因为您目前正在为OTH存储5个数据,您将在未来获得5个数据,并且同样需要7个数据。
首先,SSN和OTH = 5,是否是拼写错误,否则使用此枚举的switch语句的编译时错误? 现在,将OTH = 5更改为OTH = 7,如果您使用枚举为SomeCode someCode = (SomeCode)5
,则会发生突变。
这不是一个错字,因此改变它的问题。它永远不会在开关状态中使用,所以没有编译时错误。 – cjk 2010-08-06 08:58:34
这取决于。只有在您确认没有人依赖其值为5或与SSN相同的值时,或者您可以重构这种依赖关系时,才会发生这种非重大更改。
虽然确实如果没有人依赖于它的值为5,它并不是一个突破性改变,值得注意的是任何人使用它都取决于它是5,即使这在代码中并不明确。
如果我写对本次大会类似的代码:
if(myVal == SomeCode.OTH)
{
//do something
}
然后在内部是比较它的5尽管5号没有我的源代码中的任何地方出现的值,所以它会如果我部署新版本的程序集,请打破。
保存优雅是我不需要重新编写来处理这个重大变化,只需重新编译即可。
感谢您的支持。所有我需要的信息。 – cjk 2010-08-06 08:59:32