2011-05-10 61 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