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

时间:2015-01-16 13:43:22

标签: c# enums tostring

enum Flags
{
  Foo,
  Bar
}

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

2 个答案:

答案 0 :(得分:11)

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

但要注意这样的情况:

var test = (Flags)(-1);
// test.ToString() == "-1"

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

此外,如果您的枚举定义为[Flags],请执行以下操作:

[Flags]
enum Flags
{
    Foo = 1,
    Bar = 2
}

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

var test = Flags.Foo | Flags.Bar;
// test.ToString() == "Foo, Bar"

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

答案 1 :(得分:5)

  

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

来自MSDN