关于将字符串转换为枚举值的问题很多。通常,答案看起来类似于this question的答案:

StatusEnum MyStatus = (StatusEnum) Enum.Parse( typeof(StatusEnum), "Active", true );

虽然这是一个非常合理的答案,但是您可以编写一种简化调用的方法,但它没有回答问题,为什么 Enum.Parse()返回object而不是适当的枚举值。为什么我必须将其转换为StatusEnum

编辑:

基本上,问题是为什么这样的函数不属于Enum类?
    public static T Parse<T>(string value) where T: struct
    {
        return (T)Enum.Parse(typeof (T), value);
    }

此功能运行良好,完全符合您的期望。 StatusEnum e = Enum.Parse<StatusEnum>("Active");

最佳答案

这样做是因为

  • 它早于泛型和(即使不是)
  • 通用约束不能为枚举(在主流.NET语言中)

  • 因此,Object是唯一适用于任何enum类型的类型。

    通过返回对象,即使需要强制转换,API也至少具有功能。

    09-11 18:51