2013-03-17 104 views
4

.NET你可以有多个enum值为相同的整数?你可以有多个相同的整数枚举值?

例如。

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

编译器在你尝试时说什么?说真的,没有人再想过吗? – paxdiablo 2013-03-17 06:18:00

+1

@paxdiablo在C++中,很多未定义的行为将被编译器接受而不会发出警告。 – 2013-03-17 06:21:32

+5

@ ta.speot.is,这不是C++,它是C#。行为由MS定义。 – paxdiablo 2013-03-17 06:22:51

回答

3

工作正常。您发布的代码绝对没有错。它编译就好和代码工作,需要提醒的是

PersonGender.NonStated == PersonGender.InadequatelyDescribed 
1

我会建议一个枚举不会在你的上下文中使用,而不是您可以使用创建一个类并且能够方法正确的事解决你的目的。在你的班级这样的东西: -

class A 
{ 

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

你是如何得出这个结论的? – 2013-03-17 06:27:34

+0

@MichaelPetrotta: - 是的,我同意我不应该把它作为结论,但绝对是我的建议。 – 2013-03-17 06:29:49

+0

为什么downvote? – 2013-03-17 06:31:30

2

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

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

10

在C#中,这是不允许的,因为每C# Language Specication,第4版。

1.10 Enums没有提到的可能性,但后来在部分14 Enums,我们看到(在14.3):


多个枚举成员可能共享相同的关联值。该示例

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

示出了一个枚举,其中两个枚举成员 - BlueMax - 具有相同的相关联值。

相关问题