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