我有以下枚举定义(在C#):Enum.GetNames()导致负枚举意想不到为了常数
public enum ELogLevel
{
General = -1, // Should only be used in drop-down box in Merlinia Administrator log settings
All = 0, // Should not be used as a level, only as a threshold, effectively same as Trace
Trace = 1,
Debug = 2,
Info = 3,
Warn = 4,
Error = 5,
Fatal = 6,
Off = 7 // Should not be used as a level, only as a threshold
}
现在,当我对这个类型做一个Enum.GetNames()
我得到一个字符串数组如预期的9个元素,但顺序是All,Trace,...,Off,General,这不是我所期待的。
这里的MSDN documentation为Enum.GetNames()
:
“备注:返回值数组的元素由枚举常量的 值进行排序。”
这是怎么回事?我可以改变我的程序来考虑这个“功能”,但我想知道为什么.NET正在做它正在做的事情。
我会建议向微软提交一个错误报告。 –
它不再是一个错误,它是一个功能[现在记录](http://msdn.microsoft.com/en-us/library/system.enum.getvalues.aspx):“数组的元素被排序通过枚举常量的二进制值(**,即它们的无符号数值**)。“ – jason