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

Nice way to get names and their enum values in C#

我想完成一个非常简单的任务,但关键是要以一种漂亮、简单的方式来完成。我们都希望编写易于维护、易于理解的漂亮代码。我遇到了经验丰富的 C# 开发人员可能会帮助我解决的问题。

我想创建一个dictionary,其中keysstring[])是enum values的名称,values是它们对应的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);

有经验的开发人员,您将如何解决这个问题以更清晰地编写它?或者枚举有一个技巧可以实现快速查找,例如“给我一个名称满足我的条件”的枚举。

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

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

要获取一个字符串并将其转换为匹配的枚举值,或者如果没有匹配的枚举值甚至会失败,您应该使用 Enum.TryParse:

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