繁体   English   中英

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

[英]Enum.GetNames() results in unexpected order with negative enum constants

我有以下枚举定义(在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
}

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

这是Enum.GetNames()的MSDN 文档

“备注:返回值数组的元素按枚举常量的值排序。”

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

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

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

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

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

根据排序的发生方式,可能是它将值排序为无符号,在这种情况下,-1 = 0xffffffff,当然大于7。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM