2016-04-23 176 views
0

免責聲明。我不確定標題是否是最好的。我無法想象一個不長不長的更好的那個。請隨時提出改進建議。在枚舉中枚舉是否有一個通用的方法?

當程序員設計一組狀態時,很自然地應用枚舉。在例如平日裏,很明顯,傳統上被接受和直接。但是,有時候,我們還需要將狀態的原因設置爲例如任務管理。我們也有狀態如下:

enum Status { New, Active, Inactive } 

,但仍然需要有狀態一個狀態,狀態一個階段或者一個理性的狀態。通常情況下,我想補充了一堆新的枚舉的,像這樣:

enum StatusOfNew { UnseenYet, RefusedToEvenLookAtAndOrQuitTheJob } 
enum StatusOfActive { Assigned, Commenced, BeingTested } 
enum StatusOfInactive { Done, Trashed, GivenUpOnBecausePeopleKeepQuittingTheJob } 

另一種方法是在下列方式的所有組合的一個長長的清單。

enum Status 
{ 
    New_UnseenYet, New_RefusedToEvenLookAtAndOrQuitTheJob, 
    Active_Assigned, Active_Commenced, Active_BeingTested, 
    Inactive_Done, Inactive_Trashed, Inactive_GivenUpOnBecausePeopleKeepQuittingTheJob 
} 

然後,我們有優雅的方法,其中每個狀態是其自己的類型與通用超和特定階段/原因。

class New : Status 
{ 
    enum Reason 
    { 
    UnseenYet, 
    RefusedToEvenLookAtAndOrQuitTheJob 
    } 
} 

考慮到實施的複雜性,維護成本和穩健性增益之間的關係,我可以互相打擊它們。然而,我想知道是否還有其他方法需要考慮,應用的語法或將問題全部排除在外的方法。

主要是,作爲一個MS猴子,我想在C#中看到一種語言特定的解決方案。然而,作爲一個好奇和開放的生物,我也歡迎來自其他語言的建議。我試圖向程序員提出這個問題,但顯然,我的問題太愚蠢了,站點告訴我要避開(沒有褻瀆意圖,錯字是故意的,我喜歡鴨子)。

回答

1

保持簡單。這實際上是狀態原因。但是,您的代碼如何獲得應該推動您的設計。

如果你期望兩者都有狀態模型,那麼你可能需要嵌套的枚舉。否則,類或類/枚舉配置更有意義。

其目標是具有可讀,可維護的代碼。 Enums在那裏是爲了安全和可讀性。所以這個決定是一個恰當的方面。

也就是說,沒有自上而下更好。你所有的方法都在正確的背景下有效。

+0

我完全同意你的觀點。而且,正如我所提到的,我已經評估了複雜性與收益之間的關係。我最感興趣的是是否有更多架構要考慮,我可能錯過了。 –

+0

我明白了。我承認我剛剛閱讀了這個問題的開始,似乎問了這個問題並剔除了這些實現。也許拉出你的問題,並將其置於頂部或底部作爲tl; dr部分的一部分... – jdv

+0

我現在**非常**混合情緒。一方面,我同意你的建議務實(移出實際問題)。另一方面,我倒下了這樣一個浪潮,把三,四段短文分類爲TL,嘿嘿。這真的是一個很長的帖子嗎?我完全不認爲它是短暫的和點對點的? –