Csharp/C#教程:Enum.GetNames()导致具有负枚举常量的意外顺序分享


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

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

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

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

这是一个已知的错误,同时报告了GetNames()GetValues() ,但最终因为无法修复而关闭:

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

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

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

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

上述就是C#学习教程:Enum.GetNames()导致具有负枚举常量的意外顺序分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1002985.html

(0)
上一篇 2021年12月27日
下一篇 2021年12月27日

精彩推荐