2012-06-10 494 views
4

Can Enum是否包含其他Enum元素及其自己的元素?可以枚舉包含其他枚舉?

public enum CardSuit 
{ 
    spades, 
    hearts, 
    diamonds, 
    clubs 
} 

public enum GameSuit 
{ 
    spades,  //  These are 
    hearts,  //  the same 
    diamonds,  //  " CardSuit " 
    clubs,   //  elements 

    suns //    " GameSuit " special element 
} 

我們可以在沒有重複鍵入相同元素的情況下將CardSuit包含在GameSuit中嗎?

回答

4

不幸的是,沒有什麼好的解決方案,你想要使用枚舉。還有其他的選擇,你可以試試,等一系列特定的「枚舉類」型的public static readonly領域:

public class CardSuit 
{ 
    public static readonly CardSuit Spades = new CardSuit(); 
    public static readonly CardSuit Hearts = new CardSuit(); 
    ... 
} 

public enum GameSuit : CardSuit 
{ 
    public static readonly GameSuit Suns = new GameSuit(); 
} 

在實踐中,這可以工作主要是爲好,雖然沒有switch聲明表示支持。用法可能是這樣的:

var cardSuit = ...; 
if (cardSuit == CardSuit.Spades || cardSuit == GameSuit.Suns) { ... } 
2

你輸入的內容是合法的,但兩個枚舉是相互獨立的。

GameSuit枚舉黑桃與CardsSuit enum黑桃沒有關係。

+0

+1 GameSuit枚舉黑桃與CardsSuit枚舉黑桃沒有任何關係。 –

1

您可以從一個枚舉類型的值攜帶到另一個明確:

public enum Foo { a, b, c } 
public enum Bar { a = Foo.a, b = Foo.b, c = Foo.c + 3, d } 
+0

這在實踐中不起作用。當'Foo foo = Bar.d'不能編譯時,有什麼意義? (更不用說'Foo.c + 3'相當可怕了) –

+0

@KirkWoll - 我不希望'Bar.d'可以分配給'Foo'的實例。 – HABO

+0

對,我知道。所以......如果你不能用原來的「擴展」枚舉來交換,那有什麼意義呢?你留下了兩個相似的枚舉,但彼此之間沒有語法關係。 –

0

ENUM是一類特殊的,具有特殊的行爲。你不能直接繼承這個類,但是當你聲明一個新的enum時,它是不正確的繼承者。

您不能從其他enum繼承一個新的enum

你可以做這樣的事情的唯一方法就是使用反射。但你沒有得到你想要做的。這可以使你可以走多遠使用Refletcion使用枚舉:

但恐怕這並不服務器你的目的。