C#中的枚举类型

5

我在一本C#书中读到了这个声明。

枚举不一定需要遵循顺序,而且不需要具有唯一的值

如果我理解这个声明的话,它意味着以下情况之一是可以接受的(我不知道哪一个):

1.

enum EmpType
{
    Manager = 1,
    Grunt = 1,
    Contractor = 100,
    VicePresident = 9
}

2.

enum EmpType
{
    Manager = 10,
    Manager = 1,
    Contractor = 100,
    VicePresident = 9
}

有人能解释一下吗?我本以为C#应该是C/C++的子集。

1
它不能包含重复的字段名称,就像代码片段#2中一样。 - leppie
5
“我原本以为C#是C/C++的子集。”“到底是谁说过那种话?” - Marc Gravell
C#与C++(除了它们都是面向对象的语言)或C没有任何共同之处。C#更接近于Java或Object Pascal(Delphi)。 - Petr Abdulin
@Petr Java是从C语言发展而来的,对吧?这是同一本书上说的。这本书是由Apress出版的,所以他们应该是正确的(或者我认为是这样)。 - afaolek
Java的语法与C类似(C#和C++也是如此),但我不会说它来自C。 - Petr Abdulin
5个回答

4
第一个是有效的,你可能有重复的而不是重复的名称

3

1 是正确的,2 不正确。

正如书中所说,枚举不需要具有唯一的 (例如第二个示例展示了带有非唯一名称的枚举)。名称必须是唯一的,因为这是编译器将其与一个值匹配的方式。


3

实际上,为什么不去检查呢?每个枚举都是System.Enum类的子类(特别处理),每个枚举元素都是静态字段,使用字面值初始化 - 你不能有两个相同名称的字段,但可以有具有相同值的字段,因此第1种情况将起作用,而第2种情况则不会。


1

第一种情况是可以接受的。第二种情况会在编译时抛出异常。您可以拥有多个等效值,但不能有重复的等效名称。

例如,假设您想为公司人员的工作级别定义一个枚举。您有员工和管理层。员工包括销售部门和IT部门,如果一个人在销售或IT部门,对您来说没有任何区别,他/她仍然被视为员工。您可以定义以下枚举:

public enum PersonnelLevels
{   
    Management=0,
    Sales=1,
    IT=1
}  

0

参考C# 参考中的枚举

枚举元素的默认基础类型是 int。

您可以将任何整数值分配给任何枚举元素。您可以为不同的元素分配重复的值。但是,元素名称必须唯一。

这意味着,第一个块是正确的。但是,第二个块不正确。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接