C#enum ToString()是否保证返回枚举名称?

kaa*_*lus 4 c# enums tostring

enum Flags
{
  Foo,
  Bar
}
Run Code Online (Sandbox Code Playgroud)

Flags.Foo.ToString()保证返回"富"?或者我必须使用Enum.GetName(...)?

Luc*_*ski 13

如果枚举值恰好与枚举项匹配,则为是.

但要注意这样的情况:

var test = (Flags)(-1);
// test.ToString() == "-1"
Run Code Online (Sandbox Code Playgroud)

如果该值与枚举项不匹配,则它将仅将基础值作为字符串返回.默认情况下,枚举的基础数据类型是int.

此外,如果您的枚举定义[Flags]如下:

[Flags]
enum Flags
{
    Foo = 1,
    Bar = 2
}
Run Code Online (Sandbox Code Playgroud)

然后ToString()可以返回以逗号分隔的标志列表:

var test = Flags.Foo | Flags.Bar;
// test.ToString() == "Foo, Bar"
Run Code Online (Sandbox Code Playgroud)

就像Orace在评论中指出的那样,如果值不明确,即如果多个枚举项可以匹配该值,则不应对将选择哪一个进行任何假设.

  • 如果多个枚举成员具有相同的基础值,并且您尝试根据其基础值检索枚举成员名称的字符串表示形式……您的代码不应假设将返回哪个字符串。msdn.microsoft.com/fr-fr/library/a0h36syw(v=vs.110).aspx (2认同)

Dav*_*ton 5

返回值使用通用格式说明符("G")格式化.也就是说,如果FlagsAttribute未应用于此枚举类型且命名常量等于此实例的值,则返回值是包含常量名称的字符串.如果应用的FlagsAttribute和有一个或多个命名常数等于该实例的值的组合,则返回值是包含常数的名字的分隔符分隔的列表的字符串.否则,返回值是此实例的数值的字符串表示形式.

来自MSDN