我正在编写一个应用程序,它使用具有以下定义的字段的多个子类: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 语句: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;}但是,我理解它的方式是一个不同的枚举选项由一个值表示。如果表示枚举选项的值将被使用两次,则该切换可能会失败。一个解决方案是外观,使用基类来定义枚举,但是,我对实现的内部结构感兴趣。您通常可以依赖代表枚举选项的值的唯一性吗?
1 回答
明月笑刀无情
TA贡献1828条经验 获得超4个赞
在内部,枚举只是整数(或长整数,或您定义的任何数字类型)。因此,如果您有多个枚举,将它们转换为 int 并比较它们可以得到相同的值。然而,这就是为什么你在比较之前不投射它们的原因。这确保了类型安全。如果您的两个枚举不是从同一类型派生的,那么您的比较甚至是不可能的,因为您期望的是 Class1._ACTION 类型的枚举值,但将其与 Class2._Action 的实例进行比较。它应该给你一个编译时错误。如果您的枚举的定义是基类的一部分,那么实例将是相同的并且双重比较是多余的,正如 Jereon 上面提到的。
- 1 回答
- 0 关注
- 78 浏览
添加回答
举报
0/150
提交
取消