我正在編寫一個應(yīng)用程序,它使用具有以下定義的字段的多個子類:public _ACTION ACTION { get; set; }public enum _ACTION { INVALID, UPDATE, VALID }根據(jù)該字段中提供的值,稍后會采取行動。雖然只實現(xiàn)了第一個類,但相應(yīng)的代碼如下所示: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) 的出現(xiàn),它擴展了與 Class1 相同的基類(以及之后的每個類),switch 會變得更加復(fù)雜,我考慮過這樣的 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;}但是,我理解它的方式是一個不同的枚舉選項由一個值表示。如果表示枚舉選項的值將被使用兩次,則該切換可能會失敗。一個解決方案是外觀,使用基類來定義枚舉,但是,我對實現(xiàn)的內(nèi)部結(jié)構(gòu)感興趣。您通常可以依賴代表枚舉選項的值的唯一性嗎?
1 回答

明月笑刀無情
TA貢獻1828條經(jīng)驗 獲得超4個贊
在內(nèi)部,枚舉只是整數(shù)(或長整數(shù),或您定義的任何數(shù)字類型)。因此,如果您有多個枚舉,將它們轉(zhuǎn)換為 int 并比較它們可以得到相同的值。然而,這就是為什么你在比較之前不投射它們的原因。這確保了類型安全。如果您的兩個枚舉不是從同一類型派生的,那么您的比較甚至是不可能的,因為您期望的是 Class1._ACTION 類型的枚舉值,但將其與 Class2._Action 的實例進行比較。它應(yīng)該給你一個編譯時錯誤。如果您的枚舉的定義是基類的一部分,那么實例將是相同的并且雙重比較是多余的,正如 Jereon 上面提到的。
- 1 回答
- 0 關(guān)注
- 102 瀏覽
添加回答
舉報
0/150
提交
取消