在C#中获取名称及其枚举值的好方法

时间:2015-05-21 20:48:21

标签: c# enums

我想要完成一个非常简单的任务,但事情是以一种简单的方式做到这一点。我们都希望编写易于维护,快速理解的漂亮代码。我有一个经验丰富的C#开发人员可以帮助我的问题。

我想创建一个dictionary,其中keysstring[])的名称为enum valuesvalues是他们的生态响应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);

经验丰富的开发者如何以更清晰的方式解决这个问题呢?或者也许有一个枚举的技巧可以实现快速查找,例如“ 给我一个枚举,哪个名字符合我的条件 ”。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

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