使用隐式枚举字段来表示数值一定是不好的做法吗?
这是一个用例:我想要一种简单的方法来表示十六进制数字,并且由于 C# 枚举基于整数,因此它们看起来很自然。我不喜欢 achar
或 astring
这里,因为我必须明确地验证它们的值。枚举的问题是数字[0-9]
不是有效的字段标识符(有充分的理由)。我突然想到我不需要声明 numbers 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”。显然,这很容易解决。我想知道我没有考虑的隐式方法是否还有其他问题。