我正在编写一个使用多个子类且具有以下定义字段的应用程序:
public _ACTION ACTION { get; set; }
public enum _ACTION { INVALID, UPDATE, VALID }
根据该字段中提供的值,稍后将执行操作。虽然仅实现了第一类,但相应的代码如下:
switch (action) {
case Class1._ACTION.INVALID:
this.ColorRow(row, StyleNotOK);
break;
case Class1._ACTION.UPDATE:
this.ColorRow(row, StyleUpdate);
break;
case Class1._ACTION.VALID:
break;
}
随着第二个类(Class2)的出现扩展了与Class1相同的基类(以及此后的每个类),切换将变得更加复杂,我考虑过要做如下的switch语句:
switch (action) {
case Class1._ACTION.INVALID:
case Class2._ACTION.INVALID:
this.ColorRow(row, StyleNotOK);
break;
case Class1._ACTION.UPDATE:
case Class2._ACTION.UPDATE:
this.ColorRow(row, StyleUpdate);
break;
case Class1._ACTION.VALID:
case Class2._ACTION.VALID:
break;
}
但是,据我所知,它是一个独特的枚举选项由一个值表示。如果代表枚举选项的值将被使用两次,则该开关可能会失败。
一个解决方案应运而生,使用基类来定义枚举,但是,我对实现的内部感兴趣。您通常可以依靠代表枚举选项的值的唯一性吗?
答案 0 :(得分:0)
在内部,枚举只是整数(或long或您定义的任何数字类型)。因此,如果您有多个枚举,则将它们强制转换为int并进行比较可以得出相同的值。但是,这就是为什么在比较之前不进行转换。这样可以确保类型安全。如果您的两个枚举不是从同一类型派生的,那么您将无法进行比较,因为您期望的枚举值为Class1._ACTION类型,但是将其与Class2._Action的实例进行比较。它应该给您一个编译时错误。如果枚举的定义是基类的一部分,则实例将是相同的,并且双重比较是多余的,如上面的Jereon所述。