【问题标题】:Can you have multiple enum values for the same integer? [duplicate]同一个整数可以有多个枚举值吗? [复制]
【发布时间】:2013-03-17 06:16:22
【问题描述】:

.NET 中,同一个整数可以有多个enum 值吗?

例如。

public enum PersonGender
    {
        Unknown = 0,
        Male = 1,
        Female = 2,
        Intersex = 3,
        Indeterminate = 3,
        NonStated = 9,
        InadequatelyDescribed = 9
    }

【问题讨论】:

  • 你尝试编译器时说了什么?说真的,没有人再思考了吗?
  • @paxdiablo 在 C++ 中,许多未定义的行为将被编译器接受而不会发出警告。
  • @ta.speot.is,这不是 C++,而是 C#。行为由 MS 定义。
  • 我很想知道,您这样做的根本目的是什么?显然,你说的想要是不合逻辑的;但是,您似乎不会问一个最终目的没有意义的问题。
  • @paxdiablo 问题被标记为 VB .NET

标签: c# .net enums clr


【解决方案1】:

在 C# 中,这是允许的,根据 C# Language Specication,版本 4。1.10 Enums 部分没有明确 提到这种可能性,但稍后在 14 Enums, 14.3 部分中,我们看到:

多个enum 成员可以共享相同的关联值。例子

enum Color {
   Red,
   Green,
   Blue,
   Max = Blue
}

显示一个 enum,其中两个 enum 成员 - BlueMax - 具有相同的关联值。

【讨论】:

  • 有趣的是,如果你启用了代码分析器CA1069,上面的方法没问题,但是如果你分配了Max = 2,那么分析器会抱怨分配了相同的常量值
  • @David,它可能假设,如果您将 constant 分配给两个不同的枚举值,那么您可能犯错误的可能性非零,特别是如果价值观无处不在:enum x { a = 42, b = 17, c = 12, d = 314159, e = 271828, f = 17 };。如果您将一个已经存在的 enum value 分配给一个 enum 值,那么假设您打算这样做可能是安全的。
  • 我认为你是对的。这不是检查您是否做正确的事情的好方法
【解决方案2】:

效果很好。您发布的代码绝对没有问题。它编译得很好并且可以在代码中工作,但需要注意的是

PersonGender.NonStated == PersonGender.InadequatelyDescribed

【讨论】:

    【解决方案3】:

    我发现这个 StackOverflow 帖子与这个问题有关。我认为这是如何工作的非常明智的讨论。 Non-unique enum values

    现在,我还可以补充一点,我认为这将是对枚举的模棱两可(因此是不恰当的)使用。编写对其他人阅读有意义的代码很重要,在这种情况下,我会被这个枚举推迟。

    【讨论】:

      【解决方案4】:

      我建议在您的上下文中使用 enum 不是一个正确的方法,而是您可以使用创建一个可以解决您的目的的类和方法。在你的课堂上是这样的:-

      class A
      {
      
          static readonly ABCD= new Dictionary<int,string>
              {
                  { 1, "X" },
                  { 2, "X" },
                  { 3, "Y" }
                  { 4, "Y" }
              }
      }
      

      【讨论】:

      • 你是怎么得出这个结论的?
      • @MichaelPetrotta:- 是的,我同意我不应该把它作为结论,但绝对是我的建议。
      猜你喜欢
      • 2015-02-26
      • 2017-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多