C#enum ToString()是否保证返回enum name?
C#enum ToString()是否保证返回enum name?,c#,enums,tostring,C#,Enums,Tostring,Flags.Foo.ToString()是否保证返回“Foo”?或者我必须使用Enum.GetName(…)?如果枚举值恰好与枚举项匹配,则选择“是” 但要注意这样的情况: enum Flags { Foo, Bar } var test = (Flags)(-1); // test.ToString() == "-1" 如果该值与枚举项不匹配,它将以字符串形式返回基础值。默认情况下,枚举的基础数据类型是int 另外,如果您的枚举是用[Flags]定义的,如下所示: enum Fla
Flags.Foo.ToString()是否保证返回“Foo”?或者我必须使用Enum.GetName(…)?如果枚举值恰好与枚举项匹配,则选择“是”
但要注意这样的情况:
enum Flags
{
Foo,
Bar
}
var test = (Flags)(-1);
// test.ToString() == "-1"
如果该值与枚举项不匹配,它将以字符串形式返回基础值。默认情况下,枚举的基础数据类型是int
另外,如果您的枚举是用[Flags]
定义的,如下所示:
enum Flags
{
Foo,
Bar
}
var test = (Flags)(-1);
// test.ToString() == "-1"
然后ToString()
可以返回逗号分隔的标志列表:
[Flags]
enum Flags
{
Foo = 1,
Bar = 2
}
就像Orace在注释中指出的那样,如果值不明确,即如果多个枚举项可以匹配该值,则不应该对将选择哪一个进行任何假设
返回值使用通用格式说明符(“G”)进行格式化。也就是说,如果FlagsAttribute未应用于此枚举类型,并且有一个命名常量等于此实例的值,则返回值是一个包含常量名称的字符串。如果应用了FlagsAttribute,并且有一个或多个命名常量的组合等于此实例的值,则返回值是一个字符串,其中包含以分隔符分隔的常量名称列表。否则,返回值是此实例数值的字符串表示形式
从你尝试它时发生了什么?他如何保证结果总是如此?如果你有多个相同值的名称,则不能保证结果是一样的,例如:enum Beer{Empty=0,None=0,HomeBrew=1,Bud=2,Budwizer=2,Budweiser=2,Case=24}Beer.Bud.ToString()
可能返回具有相同值的任何枚举成员。如果多个枚举成员具有相同的基础值,并且您尝试根据基础值检索枚举成员名称的字符串表示形式。。。您的代码不应该对返回哪个字符串做出任何假设。msdn.microsoft.com/fr-fr/library/a0h36syw(v=vs.110).aspx