是标志枚举的字符串表示中定义的值的顺序

pm1*_*100 -1 c# enums

[flags]
enum Test
{
  a=0,
  b=1,
  c=2
}
...
var v = Test.c | Test.b;
var str = v.ToString();
// str = 'b, c'
Run Code Online (Sandbox Code Playgroud)

是'str'中定义的值的顺序.b,c和c,b在语义上都是相同的,在语法上是不同的.为什么我关心 - 我正在编写测试代码(不在c#中)更喜欢不需要花哨的逻辑解析所有可能的组合

Jim*_*hel 5

对文件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;
Run Code Online (Sandbox Code Playgroud)

这表明枚举名称将按照枚举值的顺序出现.虽然正如你所说 - 从版本到版本都没有保证