鉴于这两个枚举:
public enum test
{
one = 1,
two,
three
}
public enum test2
{
zero = 0,
one = 1,
two = 2,
three = 3
}
我更喜欢使用第一种方法。我看到很多开源项目和代码在我的工作中使用第二种方法,其中每个项目都有一个值。我很少看到第一个编码的例子。是否有一个原因?为什么第二种方法比第一种方法更受欢迎?此外,您可以将此问题的标题更改为更合适的标题,因为我不确定如何说出此问题
答案 0 :(得分:2)
第二个更安全,可用于序列化。想到的一个例子是WCF。实际上,如果您尝试使用未初始化的枚举成员传递对象,则WCF中的血清化会抛出异常。
答案 1 :(得分:2)
不确定您的问题是否有规范的答案,但我敢说,第二种方法的优势在于,如果某人删除了特定值,则事情不会自动重新编号。在第一个示例中,如果有人删除two
,则three
的值会突然变为2
。不太好......
答案 2 :(得分:2)
枚举元素具有名称和值。几乎所有关于控制值。有大量的枚举用法,其中一些用法关注值。
以下是一些例子:
XmlSerializer
,则元素名称(文本)用于存储属性的值。在这里,你不关心价值观。iTextSharp
有大量未分组的常量,这使得很难找到所需的常量;如果他们有类别或枚举,可以容纳它们 - 这会更容易),然后你关心价值观。实际上,已知有关编译器如何为枚举元素赋值的规则。所以,例如,如果你有这个枚举
public enum test
{
one,
two,
three
}
然后,只要您需要向其添加four
和oneandhalf
,就可以像这样添加
public enum test
{
one,
two,
three,
four,
oneandhalf
}
或者像这样
public enum test
{
one = 0,
oneandhalf = 4,
two = 1,
three = 2,
four = 3,
}
并且您仍然保持向后兼容性(以前保存在数据库中的值在更新后都可以)。请注意,当插入元素存在于现有元素之间或bad之间时,您必须明确指定值。
答案 3 :(得分:0)
因为我们也可以使用第二种方法如下
public enum test2
{
zero = 0,
one = 5,
two = 10,
three = 20
}
所以我们可以用不同的间隔分配不同的值,只能通过第二种方式...
答案 4 :(得分:0)
考虑以下2个枚举,您将看到哪个更易于解释:
public enum numbers
{
one = 5,
hundred = 100,
thousand = 1000
}
和
public enum numbers
{
one,
hundred,
thousand
}
你仍然可以使用第二种方法,但我相信你会看到可能出现的潜在问题。