[flags]
enum Test
{
a=0,
b=1,
c=2
}
...
var v = Test.c | Test.b;
var str = v.ToString();
// str = 'b, c'
是'str'中定义的值的顺序。 b,c和c,b在语义上都是相同的,在语法上是不同的。我为什么关心 - 我正在编写测试代码(不是在c#中)更喜欢不需要花哨的逻辑解析所有可能的组合
答案 0 :(得分:5)
documentation for Enum.ToString
说
如果应用FlagsAttribute并且有一个或多个命名常量的组合等于此实例的值,则返回值是一个字符串,其中包含以分隔符分隔的常量名称列表。
它没有指明它们将以什么顺序显示。
执行格式化的代码(请参阅参考源中的函数InternalFlagsFormat
,此处:http://referencesource.microsoft.com/#mscorlib/system/enum.cs)似乎始终以相同的方式工作。
但是,由于订单没有记录,您必须自己判断改变的可能性。过去因为假设事情不会发生变化而被焚烧,我真的很谨慎依赖于没有明确记录的事情。
OP编辑:代码中有一个有趣的注释,用于格式化输出
// These values are sorted by value. Don't change this
String[] names;
ulong[] values;
这表明枚举名称将按照枚举值的顺序出现。虽然如你所说 - 从版本到版本不保证