C# 枚举值在全局范围内是否应该是唯一的?
我在编程基础课程中读到,C# 枚举值在全局范围内是否应该是唯一的?,c#,enums,monodevelop,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 我在这个问题上也发现了同样的想法: 枚举名称在全局范围内,它们必须是唯一的 我在Ubuntu 14.10上用MonoDevelop编写C
enum
值应该是唯一的,具有以下示例:
enum color = { red, orange, yellow };
enum fruit = { apple, orange, kiwi}; // error: orange is redefined
int kiwi = 42; // error: kiwi is redefined
我在这个问题上也发现了同样的想法:
枚举名称在全局范围内,它们必须是唯一的
我在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行为,还是编译时没有错误?枚举值在全局范围内是否应该是唯一的?不,这不是一个bug,这就是C#应该如何工作的。你链接到的问题是关于C,而不是C 在C语言中,所有枚举值都必须是唯一的,因为您可以使用该值,而无需指定它所属的枚举。这就是为什么这个问题中的例子没有编译 在C#中,枚举值仅在同一个枚举中必须是唯一的。在C#中,如果不指定枚举值所属的枚举,则永远不会使用该枚举值,因此来自不同枚举的值不会冲突
枚举值通常是唯一的,这与试图使标识符具有描述性有关。如果您碰巧对不同枚举中的值使用了相同的名称,那么这是有原因的。要么枚举密切相关,因此它们在意义上重叠,要么有一个单词具有多个意义。您所谈论的是
c
语言的行为
在
c#
中,枚举不能通过名称进行全局访问,您必须始终通过typeName.valueName
进行访问,例如color.Orange
,fruit.Orange
。所以不会有冲突。事实上,许多内置枚举使用相同的值名(StringSplitOptions.None
,CompareOptions.None
)。您链接的问题是c
问题,而不是c
问题。《编程基础》讲的是c还是c?@HugoRune哦,我们在学c,但这门课可能是关于c的。对不起,给你添麻烦了。C++11引入了enum类
,以解决C风格enum的这个和其他缺点;不是有效的C语法,因此不能是C。是的,有效的C语法是enum color{red,orange,yellow}代码>(没有=
令牌)