当枚举类型未知时,返回默认的枚举值

本文关键字:枚举 默认 返回 类型 未知 | 更新日期: 2023-09-27 18:20:52

我有一个方法,尝试将字符串与枚举值的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);

这将为您提供类型的默认值,这正是您想要的。

EDIT:我希望您在编译时知道类型,在这种情况下泛型是一种很好的方法。尽管事实并非如此,但我将把这个答案的其余部分留给其他人,以防对其他人有用。

或者,您可以使用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工作得更快
  • CCD_ 7在CCD_ 8内部用于检索值

默认值(T)将适用于此。获取类型并使用默认值。默认情况下,第一个元素将作为默认值

也许这会起作用

return (Enum)enumValues[0];