Enum.GetNames()导致具有负枚举常量的意外顺序

Ren*_*Pet 14 .net c# enums

我有以下枚举定义(在C#中):

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
}
Run Code Online (Sandbox Code Playgroud)

现在,当我Enum.GetNames()在这个类型上做一个我得到一个包含9个元素的字符串数组,但顺序是All,Trace,...,Off,General,这不是我所期待的.

下面是MSDN 文档Enum.GetNames():

"备注:返回值数组的元素按枚举常量的值排序."

这里发生了什么?我可以改变我的程序来考虑这个"功能",但我想知道为什么.NET正在做它正在做的事情.

Bol*_*ock 18

这是一个已知的bug既GetNames()GetValues()该报道在这里,但最终得到封闭,不会解决:

是的,这个方法确实有一个错误,它返回排序为unsigned-types的枚举值数组(-2是0xFFFFFFFE,-1是两个补码中的0xFFFFFFFF,这就是它们出现在列表末尾的原因)而不是返回按其签名类型排序的值.

不幸的是,我们无法更改GetValues的排序顺序,因为我们将打破所有已编写的.NET程序,这取决于当前的排序行为[...]

看起来你必须自己重新排序这些值.