2017-02-15 77 views
1

我具有由具有與空間枚舉用空格.TryParse不工作 - C#

 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; 
     } 
     } 

當我使用Enum.TryParse(測試值,出stEnum)的項目之一枚舉類型,它總是返回第一個元素。

// Currently stEnum returns Test1Enum which is wrong 
    Enum.TryParse("Test2 Enum", out stEnum) 
+1

是什麼在'testValue'?它查看值的名稱,而不是描述。我的意思是你的枚舉中沒有空格。 – Brandon

+5

在所有的可能性中的TryParse返回false含義解析失敗,stEnum是默認值爲0,這是TestEnum1。我不確定這個DescriptionAttribute是什麼,但我不認爲Enum.Parse/TryParse方法會對它做任何事情。 –

+0

@Brandon testValue是字符串。例如:測試1枚舉..ie相同的值,我把在[說明]屬性 – vmb

回答

2

您可以從枚舉描述解析枚舉,但你需要檢索描述枚舉值。請檢查下面的例子,從Enum描述中檢索Enum值並根據需要進行解析。

從枚舉描述枚舉值:

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); 
    } 

解析的例子:

Enum.TryParse(GetValueFromDescription<Enum1>("Test2 Enum").ToString(), out stEnum); 
1

Enum.TryParse改掉來解析基於所述枚舉值未描述的字符串。如果您的要求是基於描述進行解析,則需要使用反射來獲取屬性值。如何做到這一點已經在這太問題回答說:Finding an enum value by its Description Attribute

+0

..是不是反射以外的任何其他選擇來解決這個issue..Or像任何符合邏輯的做法 – vmb

+0

這取決於你的使用情況,你可以。嘗試'Enum.TryParse(testValue.Replace(」」的String.Empty),出stEnum);'但將只匹配如果描述的相同,只是空間在你的榜樣價值 –

+0

這篇幫您解決。您的問題?您是否在其他地方找到答案?請標記幫助您的答案或添加您在其他地方找到答案。謝謝。 –