2011-05-10 59 views
4

。 C#的枚舉只是一個簡單的Eyesore。 (IMO)。C#的枚舉有什麼問題?真的很UGG

當你從一個字符串解析它,你得到的臃腫遺留代碼看一整行:

(EnumType)Enum.Parse(typeof(EnumType), value); 

真的嗎?接受一個類型參數的解析方法,並吐出一個對象?! 當真的,它可能是:

Enum.Parse<EnumType>(value); 

這是一個值類型。所以你不能使用「as」而不是使用類型轉換。它不共享基本類型。所以你也不能爲它寫擴展名。你要麼求助於一個靜態的「助手類」(嗚呼......),或者你求助於......在字符串上添加擴展方法?!比失敗更糟?

任何人都有優雅的東西?

+0

你可能想要改寫wtf的 – 2011-05-10 01:59:11

+0

EnumType.Parse(值)不工作? – ariel 2011-05-10 02:01:08

+1

這裏有一個真正的問題嗎?你可以使用'.ToEnum ()'將擴展方法轉換爲一個枚舉類型的枚舉。只隱藏醜陋。 – ja72 2011-05-10 02:03:45

回答

8

.NET 4中增添了不少的... ...美好的事物來枚舉:

http://reedcopsey.com/2009/10/26/long-overdue-enum-goodness-in-net-4/

+0

順便說一句,這是['先生。 Copsey'](http://stackoverflow.com/users/65358/reed-copsey)給你';-)' – 2011-05-10 02:06:46

+0

謝謝你的回答。不知道這些枚舉的變化。 – 2011-05-10 03:11:54

+0

您能否在此答案中添加更多詳細信息,以便它不僅僅是一個鏈接? – 2014-05-22 21:32:53

1

我編碼.net和從來沒有失敗與enum。它對某些地方是優雅的,你試圖實現的是不是優雅。共同鑄造幾個enum?做什麼的?枚舉是一種強類型常量集,應該像這樣使用。解析enum並不是頻繁的任務,寫作(EnumType)Enum.Parse(typeof(EnumType), value);變得煩人。如果它真的繼續下去,寫:

static class EnumHelper 
{ 
    public T Parse<T>(string val) { return (T)Enum.Parse(typeof(T), val); } 
} 
+0

他沒有實際上說失敗了,那是從WTF過渡到dailywtf :),但我完全同意,如果你使用這樣的Enums,你可能會做錯誤的事情。 – 2011-05-10 02:22:15

+0

「你要麼求助於一個靜態的」助手類「(嗚呼......)」。不,我不是試圖投向共同基地。我想要做你正在做的事,但在類型T上有「enum generic constraint」。在運行時間之前,你不會知道你傳錯了類型T. – 2011-05-10 02:45:35

+0

@Sleeper Smith true。最好你可以添加'where T:struct' – Andrey 2011-05-10 11:25:39