enum Flags
{
Foo,
Bar
}
Flags.Foo.ToString()
是否可以保证返回" Foo"?或者我必须使用Enum.GetName(...)?
答案 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