为了账号安全,请及时绑定邮箱和手机立即绑定

我可以在整个项目中依赖枚举选项值的唯一性吗?

我可以在整个项目中依赖枚举选项值的唯一性吗?

C#
慕丝7291255 2022-11-13 14:47:20
我正在编写一个应用程序,它使用具有以下定义的字段的多个子类: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 上面提到的。

查看完整回答
反对 回复 2022-11-13
  • 1 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信