Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#enum ToString()是否保证返回enum name?_C#_Enums_Tostring - Fatal编程技术网

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