Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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返回错误的值?_C#_Enums_Tostring - Fatal编程技术网

C# Enum.ToString返回错误的值?

C# Enum.ToString返回错误的值?,c#,enums,tostring,C#,Enums,Tostring,我有一个简单的枚举: public enum MyEnum { [Description("Zero")] Zero, [Description("A positive number")] Positive, [Description("Any integer")] AnyInteger, [Description("A negative number")] Negative, [Description("Reserved

我有一个简单的枚举:

public enum MyEnum
{
    [Description("Zero")]
    Zero,
    [Description("A positive number")]
    Positive,
    [Description("Any integer")]
    AnyInteger,
    [Description("A negative number")]
    Negative,
    [Description("Reserved number")]
    Reserved =2
}
但是,运行以下代码:

MyEnum temp = MyEnum.AnyInteger;

string en = temp.ToString();
将en字符串设置为Reserved

为什么会这样


是否有其他方法将字符串设置为已使用的枚举字符串(在本例中为AnyInteger)?

之所以出现这种情况,是因为已将reserved设置为2。如果要为枚举设置值,则应全部执行或不执行任何操作。

定义枚举时,第一个值以
0开始,并从那里开始,除非您以其他方式进行定义,否则它是:

public enum MyEnum
        {
            [Description("Zero")]
            Zero, //0
            [Description("A positive number")]
            Positive, //1
            [Description("Any integer")]
            AnyInteger, //2
            [Description("A negative number")]
            Negative, //3
            [Description("Reserved number")]
            Reserved = 2 // it's 2 again
           }
可以在枚举中定义相同的值两次(或多次)。
ToString
查找具有相同值的名称:

MyEnum temp=MyEnum.AnyInteger; //temp = 2

string en=temp.ToString(); // return the name of the first name with value 2.

如果您坚持“保留”的值应为2,请将其放在正确的位置。否则删除
=2

MyEnum.AnyInteger==MyEnum.Reserved
还要记住一件事。在您的代码中,
(MyEnum.AnyInteger==MyEnum.Reserved)
是真的……这完全不是真的。可以有一些值集。有时候你需要这样。A-您可以将第一个值设置为X,所有其他值将自动为X+1、X+2。。。B-如果大多数值与您无关,但您仍然希望有一个特定值。就像这里的保留值,但它的值通常不会像9999或其他什么样被重新设置。注意,我没有说你必须设置全部或无,我说你应该设置。这是一项建议,而不是一项授权。我同意你的看法,你可以像莎拉在她的帖子里做的那样,但是你可能会被一个像这样的小虫子咬到。对。。。虽然我仍然不认为这是你应该避免的事情。小心使用。