枚举值应该在全球范围内是唯一的吗?
Should the Enum values be unique in the global scope?
我在 编程基础 课程中读到 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?
Enum names are in global scope, they need to be unique.
我在 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 行为还是为什么编译没有错误?枚举值在全局范围内是否应该是唯一的?
不,这不是错误,C# 应该是这样工作的。您链接到的问题是关于 C,而不是 C#。
在 C 中,所有枚举值都必须是唯一的,因为您可以在不指定它属于哪个枚举的情况下使用该值。这就是为什么那个问题中的例子没有编译。
在 C# 中,枚举值只需要在同一枚举中是唯一的。在 C# 中,您永远不会在不指定它属于哪个枚举的情况下使用枚举值,因此来自不同枚举的值不会冲突。
枚举值通常是唯一的,它试图使标识符具有描述性。如果您碰巧对不同枚举中的值使用相同的名称,那么这是有原因的。要么枚举密切相关,以至于它们在含义上重叠,要么有一个词具有多个含义。
你说的是c
语言的行为。
在 c#
中,枚举不能通过名称全局访问,您始终必须通过 typeName.valueName
访问它们,例如color.Orange
、fruit.Orange
。所以不会有冲突。事实上,许多内置枚举使用相同的值名称(StringSplitOptions.None
、CompareOptions.None
)。
我在 编程基础 课程中读到 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?
Enum names are in global scope, they need to be unique.
我在 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 行为还是为什么编译没有错误?枚举值在全局范围内是否应该是唯一的?
不,这不是错误,C# 应该是这样工作的。您链接到的问题是关于 C,而不是 C#。
在 C 中,所有枚举值都必须是唯一的,因为您可以在不指定它属于哪个枚举的情况下使用该值。这就是为什么那个问题中的例子没有编译。
在 C# 中,枚举值只需要在同一枚举中是唯一的。在 C# 中,您永远不会在不指定它属于哪个枚举的情况下使用枚举值,因此来自不同枚举的值不会冲突。
枚举值通常是唯一的,它试图使标识符具有描述性。如果您碰巧对不同枚举中的值使用相同的名称,那么这是有原因的。要么枚举密切相关,以至于它们在含义上重叠,要么有一个词具有多个含义。
你说的是c
语言的行为。
在 c#
中,枚举不能通过名称全局访问,您始终必须通过 typeName.valueName
访问它们,例如color.Orange
、fruit.Orange
。所以不会有冲突。事实上,许多内置枚举使用相同的值名称(StringSplitOptions.None
、CompareOptions.None
)。