2015-05-21 94 views
3

我想要实现一个非常简单的任务,但事情是以一种很好,简单的方式来完成。我们都希望编写易于维护,易于理解的代码。我有一个经验丰富的C#开发人员可能会帮助我的问题。在C中获取名称和枚举值的好方法#

我想创建一个dictionary,其中keysstring[])是enum valuesvalues名称是其ecorresponding enum values。如果这是混乱的,让我给你一个简单的例子:

enum Animals 
{ 
    Dog, 
    Cat, 
    Fish 
} 

Dictionary<string, Animals> result = new Dictionary<string, Animals>() 
{ 
    { "Dog", Animals.Dog }, 
    { "Cat", Animals.Cat }, 
    { "Fish", Animals.Fish } 
}; 

这里是我的方法:

一点延伸:

public static IEnumerable<T> GetValues<T>() => Enum.GetValues(typeof(T)).Cast<T>(); 

,然后建设:

var result = Utils 
    .GetValues<Animals>() 
    .ToDictionary(x => x.ToString(), x => x); 

您如何有经验的开发人员以更清晰的方式处理此问题?或者也许有一个枚举的技巧,可以使像“快速查找给我一个枚举哪个名称满足我的条件”。

+6

怎么样'Enum.TryParse'? –

+1

是的,我想你只是想'Enum.TryParse'。虽然,形成了良好的问题。 – Jonesopolis

回答

3

获得一个字符串并将它转换到与其匹配的枚举值,如果没有匹配的枚举值,你应该使用Enum.TryParse甚至失败:

Animals animal; 
if (Enum.TryParse("Dog", out animal)) 
    // animal now contains Animals.Dog 
else 
    // animal "undefined", there was no matching enum value 
2

Enum类型的Parse方法是我认为您正在寻找的方法。

var value = Enum.Parse(typeof(T), "Dog");