我在编程基础课程中读到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值在全局范围内是否应该是唯一的?
答案 0 :(得分:5)
您所谈论的是c
语言的行为。
在c#
枚举中,名称无法全局访问,您始终必须通过typeName.valueName
访问它们,例如color.Orange
,fruit.Orange
。所以不会有冲突。事实上,许多内置枚举使用相同的值名称(StringSplitOptions.None
,CompareOptions.None
)。
答案 1 :(得分:2)
不,这不是一个错误,这就是C#应该如何工作。您链接的问题是关于C,而不是C#。
在C中,所有枚举值必须是唯一的,因为您可以使用该值而不指定它属于哪个枚举。这就是为什么这个问题中的例子没有编译的原因。
在C#中,枚举值只需在同一个枚举中是唯一的。在C#中,你从不使用枚举值而没有指定它所属的枚举,因此来自不同枚举的值不会发生冲突。
枚举值通常是唯一的,它可以尝试使标识符具有描述性。如果您碰巧对不同枚举中的值使用相同的名称,那么就有理由这样做。枚举是密切相关的,因此它们在含义上重叠,或者有一个含有多个含义的词。