为什么Enum.Parse()返回对象?

Bob*_*son 13 c# enums

关于将字符串转换为枚举值有很多问题.一般来说,答案看起来像这个问题的答案:

StatusEnum MyStatus = (StatusEnum) Enum.Parse( typeof(StatusEnum), "Active", true );
Run Code Online (Sandbox Code Playgroud)

虽然这是一个非常合理的答案,并且您可以编写一个方法来简化调用,但它并没有回答为什么 Enum.Parse()返回一个object而不是相应的枚举值的问题.为什么我要把它投到StatusEnum


编辑:

基本上,问题是为什么这样的函数不是Enum类的一部分?

    public static T Parse<T>(string value) where T: struct 
    {
        return (T)Enum.Parse(typeof (T), value);
    }
Run Code Online (Sandbox Code Playgroud)

这个功能完美无缺,完全符合您的期望. StatusEnum e = Enum.Parse<StatusEnum>("Active");.

Ree*_*sey 10

这样做是因为

  1. 它早于仿制药(即使它没有:)
  2. 通用约束不能是枚举(在主流.NET语言中)

因此,Object它是唯一一种适用于任何类型的类型enum.

通过返回对象,API至少是可用的,即使需要强制转换.