带空格的枚举 .TryParse 不起作用 - C#

vmb*_*vmb 2 .net c# oop enums

我有一种枚举类型,其中包含带空格的项目

     public enum Enum1
    {
        [Description("Test1 Enum")]
        Test1Enum,
        [Description("Test2 Enum")]
        Test2Enum,
        [Description("Test3Enum")]
        Test3Enum, 
    }

   public void TestMethod(string testValue)
     {
        Enum1 stEnum;
        Enum.TryParse(testValue, out stEnum);
        switch (stEnum)
        {
            case ScriptQcConditonEnum.Test1Enum:
                Console.Log("Hi");
                break;
        }
      }
Run Code Online (Sandbox Code Playgroud)

当我使用 Enum.TryParse(testValue, out stEnum) 时,它总是返回第一个元素。

 // Currently stEnum returns Test1Enum which is wrong
    Enum.TryParse("Test2 Enum", out stEnum) 
Run Code Online (Sandbox Code Playgroud)

csh*_*pbd 5

您可以从枚举描述中解析枚举,但您需要从描述中检索枚举值。请检查下面的示例,该示例从枚举描述中检索枚举值并根据需要对其进行解析。

枚举描述中的枚举值:

public T GetValueFromDescription<T>(string description)
    {
        var type = typeof(T);
        if (!type.IsEnum) throw new InvalidOperationException();
        foreach (var field in type.GetFields())
        {
            var attribute = Attribute.GetCustomAttribute(field,
                typeof(DescriptionAttribute)) as DescriptionAttribute;
            if (attribute != null)
            {
                if (attribute.Description == description)
                    return (T)field.GetValue(null);
            }
            else
            {
                if (field.Name == description)
                    return (T)field.GetValue(null);
            }
        }
        throw new ArgumentException("Not found.", "description");
        // or return default(T);
    }
Run Code Online (Sandbox Code Playgroud)

解析示例:

Enum.TryParse(GetValueFromDescription<Enum1>("Test2 Enum").ToString(), out stEnum);
Run Code Online (Sandbox Code Playgroud)