【问题标题】:Enum.ToString return wrong value?Enum.ToString 返回错误的值?
【发布时间】:2012-04-22 13:17:53
【问题描述】:

我有一个简单的枚举:

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)?

【问题讨论】:

  • MyEnum.AnyInteger==MyEnum.Reserved

标签: c# enums tostring


【解决方案1】:

定义枚举时,第一个值以 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) 是真的......
【解决方案2】:

发生这种情况是因为您将 reserved 设置为 2。如果您想为枚举设置值,您应该全部或不设置。

【讨论】:

  • 这完全不是真的。你可以有一些价值观集。有时你需要那个。 A - 您可以将第一个值设置为 X,所有其他值将自动为 X+1、X+2 ... B - 如果大多数值与您无关,但您仍希望有一个特定值。就像这里的保留,但它的值通常不会像 9999 或其他那样被重复。
  • 注意我没有说你必须设置全部或不设置,我说你应该。这是一项建议,而不是一项授权。我同意你的观点,你可以完全按照 sara 在她的帖子中所做的那样做,但是你可能会被像这样的小虫子咬伤。
  • 对......虽然我仍然认为这不是你应该避免的事情。请谨慎使用。
猜你喜欢
  • 2014-07-02
  • 2019-06-22
  • 2023-02-22
  • 2015-06-19
  • 2019-02-03
  • 2014-01-16
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多