C# 是在标志枚举的字符串表示形式中定义的值的顺序

C# 是在标志枚举的字符串表示形式中定义的值的顺序,c#,enums,C#,Enums,是“str”中定义的值的顺序。b,c和c,b在语义上是相同的,但在句法上是不同的。为什么我会在意呢?我正在编写测试代码(不是用c#编写的),我宁愿不必对所有可能的组合进行复杂的逻辑分析 如果应用了FlagsAttribute,并且有一个或多个命名常量的组合等于此实例的值,则返回值是一个字符串,其中包含以分隔符分隔的常量名称列表 它没有指定它们的显示顺序 执行格式化的代码(请参阅参考源中的函数InternalFlagsFormat,此处:)似乎总是以相同的方式工作 但是,由于没有记录订单,您必须自

是“str”中定义的值的顺序。b,c和c,b在语义上是相同的,但在句法上是不同的。为什么我会在意呢?我正在编写测试代码(不是用c#编写的),我宁愿不必对所有可能的组合进行复杂的逻辑分析

如果应用了FlagsAttribute,并且有一个或多个命名常量的组合等于此实例的值,则返回值是一个字符串,其中包含以分隔符分隔的常量名称列表

它没有指定它们的显示顺序

执行格式化的代码(请参阅参考源中的函数
InternalFlagsFormat
,此处:)似乎总是以相同的方式工作

但是,由于没有记录订单,您必须自己判断更改的可能性有多大。在过去,我一直认为事情不会改变,这让我非常担心依赖任何没有明确记录的东西

按OP编辑:在格式化输出的代码中有一条有趣的注释

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

这表明枚举名称将按枚举值的顺序出现。尽管如您所说-并不能保证从一个版本到另一个版本进行测试

,但实际编写测试不是比在此处键入一个问题并等待他人为您测试更快吗?首先为什么是ToString()?请澄清您的问题,然后解释为什么要这样做?您可以添加属性并创建自己的ToString(作为扩展方法)。更多(你可以根据它):@Peter Lillevold,不,它不会是,我可以运行一个测试,看看它返回B,C。这意味着什么?枚举按字母顺序返回,或者按声明顺序返回,一些特定于语言环境的东西,取决于.net版本。。。。
 // These values are sorted by value. Don't change this
    String[] names;
    ulong[] values;