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

我正在编写一个应用程序,它使用具有以下定义的字段的多个子类:


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;

}

但是,我理解它的方式是一个不同的枚举选项由一个值表示。如果表示枚举选项的值将被使用两次,则该切换可能会失败。


一个解决方案是外观,使用基类来定义枚举,但是,我对实现的内部结构感兴趣。您通常可以依赖代表枚举选项的值的唯一性吗?


慕丝7291255
浏览 116回答 1
1回答

明月笑刀无情

在内部,枚举只是整数(或长整数,或您定义的任何数字类型)。因此,如果您有多个枚举,将它们转换为 int 并比较它们可以得到相同的值。然而,这就是为什么你在比较之前不投射它们的原因。这确保了类型安全。如果您的两个枚举不是从同一类型派生的,那么您的比较甚至是不可能的,因为您期望的是 Class1._ACTION 类型的枚举值,但将其与 Class2._Action 的实例进行比较。它应该给你一个编译时错误。如果您的枚举的定义是基类的一部分,那么实例将是相同的并且双重比较是多余的,正如 Jereon 上面提到的。
打开App,查看更多内容
随时随地看视频慕课网APP