C# C语言中的枚举类型#

C# C语言中的枚举类型#,c#,enums,C#,Enums,我在一本C#book上读到了这句话 枚举不一定需要 按照顺序排列,以及 不需要具有唯一的值 如果我理解该声明,则意味着其中一项是可以接受的(我不知道是哪一项): 1. enum EmpType { Manager = 1, Grunt = 1, Contractor = 100, VicePresident = 9 } enum EmpType { Manager = 10, Manager = 1, Contractor = 100,

我在一本C#book上读到了这句话

枚举不一定需要 按照顺序排列,以及 不需要具有唯一的值

如果我理解该声明,则意味着其中一项是可以接受的(我不知道是哪一项):

1.

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

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

谁能给我解释一下吗?我以为C#应该是C/C++的一个子集。

1是正确的,2不是


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

第一个名称将是有效的,您可能有重复的
而不是重复的
名称
数字1是可以接受的。第2个抛出编译时异常。可以有多个等效值。但不是等效的重复名称

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

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

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

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


也就是说,第一区是正确的。但是,块2不是。

事实上-为什么不检查:)每个枚举都是系统的子类。枚举类(经过特殊处理),每个枚举元素都是一个静态字段,用文本值初始化-不能有两个同名字段,但可以有具有相同值的字段,因此#1可以工作,“2”不会。“/P>”不能包含重复的字段名,如在Switpter 2中。“我认为C是C/C++的子集。”谁在说?C?C与C++没有什么共同点(除了它们都是OO语言)或C C更接近java或对象Pascal(Delphi)。@ PeTR和java来自C,对吗?那本书也是这么说的。这本书是由Apress出版的,所以它们应该是正确的(或者我认为)。java的语法类似于C(C和C++也是如此),但我不认为它来自C。