【发布时间】:2012-09-26 00:41:13
【问题描述】:
使用隐式枚举字段来表示数值一定是不好的做法吗?
这是一个用例:我想要一种简单的方法来表示十六进制数字,并且由于 C# 枚举是基于整数的,因此它们看起来很自然。我不喜欢这里的char 或string,因为我必须明确地验证它们的值。枚举的问题是数字 [0-9] 不是有效的字段标识符(有充分的理由)。我突然想到我不需要声明数字0-9,因为它们是隐式存在的。
所以,我的十六进制数字枚举看起来像:
public enum Hex : int {
A = 10,
B = 11,
C = 12,
D = 13,
E = 14,
F = 15
}
所以,我可以写Tuple<Hex,Hex> r = Tuple.Create(Hex.F,(Hex)1);,而r.Item1.ToString() + r.Item2.ToString() 会给我“F1”。基本上,我的问题是,如果我想将数字常量的 ToString() 值命名为枚举字段,为什么完全省略声明会有问题?
作为枚举的替代表示可以使用一些前缀声明的字段,例如:
public enum Hex : int {
_0 = 0,
_1 = 1,
_2 = 2,
_3 = 3,
_4 = 4,
_5 = 5,
_6 = 6,
_7 = 7,
_8 = 8,
_9 = 9,
A = 10,
B = 11,
C = 12,
D = 13,
E = 14,
F = 15
}
问题是上面的例子会给我“F_1”而不是“F1”。显然,这很容易解决。我想知道我没有考虑的隐式方法是否还有其他问题。
【问题讨论】:
-
你的意思是你必须从字符串转换为整数或类似的东西吗?
-
否则,为什么不只是字节值 = 0xA;?
-
@Daryn,因为我想要一个数字,而不是一个数字。你可以很容易地写出 0xAAA,这是我不想允许的。
标签: c# enums numbers naming-conventions hex