簡體   English   中英

當枚舉類型未知時返回默認枚舉值

[英]Return default Enum value when Enum type is not known

我有一個方法嘗試將字符串與枚舉值的 DescriptionAttribute 匹配,然后返回枚舉值。 如果找不到匹配項,它應該返回一個默認值,我以為我可以只返回 0。但它不會發生......

private Enum GetEnumFromDescription(Type enumType, string description)
{
      var enumValues = Enum.GetValues(enumType);

      foreach (Enum e in enumValues)
      {
          if (string.Compare(description, GetDescription(e), true) == 0)
                    return e;
      }

      return 0; // not compiling
}

我應該如何編碼上述內容?

您可以使用

return (Enum) Activator.CreateInstance(enumType);

這將為您提供類型的默認值 - 這就是您想要的。

編輯:我希望你在編譯時知道類型,在這種情況下泛型是一個很好的方法。 即使情況似乎並非如此,我還是會留下這個答案的其余部分,以防對其他人有用。

或者,您可以使用Unconstrained Melody ,它已經以更高效、類型安全的形式包含了類似的功能:)

MyEnum value;
if (Enums.TryParseDescription<MyEnum>(description, out value))
{
    // Parse successful
}

如果解析操作不成功, value將設置為“0”值。

目前它區分大小寫,但您可以輕松創建不區分大小寫的版本。 (或者讓我知道,我可以這樣做。)

我相信正確的方法是

(Enum)Enum.ToObject(enumType, 0)

因為

  • Activator.CreateInstance是所有值類型的通用解決方案, Enum.ToObject是枚舉的特定解決方案,因此Enum.ToObject聲明了代碼的明確意圖。
  • Enum.ToObject可能Activator.CreateInstance工作得更快
  • Enum.ToObjectEnum.GetValues用於檢索值。

default(T) 將為此工作。 獲取類型並使用默認值。 默認情況下,第一個元素將被視為默認值

也許這會奏效

return (Enum)enumValues[0];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM