enum Flags
{
Foo,
Bar
}
< p > Flags.Foo.ToString()
是否保证返回 "Foo"?还是我需要使用 Enum.GetName(...)?
如果枚举值恰好与枚举项匹配,那么是的。
但要注意这种情况:
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在评论中指出的那样,如果值是有歧义的,也就是说,如果多个枚举项可以匹配该值,则不应做出任何关于哪一个将被选择的假设。
enum Beer{Empty=0,None=0,HomeBrew=1,Bud=2,Budwizer=2,Budweiser=2,Case=24}
),则无法保证调用Beer.Bud.ToString()
会返回哪个名称。 - Mark Schultheiss