Enum值在全球范围内是否应该是唯一的?

时间:2015-01-25 12:31:13

标签: c# enums monodevelop

我在编程基础课程中读到enum值应该是唯一的,具有以下示例:

enum color = { red, orange, yellow };
enum fruit = { apple, orange, kiwi}; // error: orange is redefined
int kiwi = 42; // error: kiwi is redefined

我也在这个问题上找到了同样的想法:Two enums have some elements in common, why does this produce an error?

<击>   

枚举名称在全球范围内,它们必须是唯一的。


我在Ubuntu 14.10上的MonoDevelop中编写C#应用程序,我试图重现这种行为:

using System;

namespace FP
{
    class MainClass
    {
        enum color { red, orange, yellow };
        enum fruit { apple, orange, kiwi}; // error: orange is redefined
        int kiwi = 42; // error: kiwi is redefined
        public static void Main (string[] args)
        {
            Console.WriteLine ("Hello World!");
        }
    }
}

上面的程序编译成功。

这是一个已知的MonoDevelop行为还是为什么编译时没有错误? Enum值在全局范围内是否应该是唯一的?

2 个答案:

答案 0 :(得分:5)

您所谈论的是c语言的行为。

c#枚举中,名称无法全局访问,您始终必须通过typeName.valueName访问它们,例如color.Orangefruit.Orange。所以不会有冲突。事实上,许多内置枚举使用相同的值名称(StringSplitOptions.NoneCompareOptions.None)。

答案 1 :(得分:2)

不,这不是一个错误,这就是C#应该如何工作。您链接的问题是关于C,而不是C#。

在C中,所有枚举值必须是唯一的,因为您可以使用该值而不指定它属于哪个枚举。这就是为什么这个问题中的例子没有编译的原因。

在C#中,枚举值只需在同一个枚举中是唯一的。在C#中,你从不使用枚举值而没有指定它所属的枚举,因此来自不同枚举的值不会发生冲突。

枚举值通常是唯一的,它可以尝试使标识符具有描述性。如果您碰巧对不同枚举中的值使用相同的名称,那么就有理由这样做。枚举是密切相关的,因此它们在含义上重叠,或者有一个含有多个含义的词。