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

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

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

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


编辑:

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

  public static T Parse(string value) where T: struct { return (T)Enum.Parse(typeof (T), value); } 

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

这样做是因为

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

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

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

但是,TryParse支持类型参数:

Enum.TryParse(name, true, out ret);

因此,如果指定out值为FooEnum ret; ,之后您不需要将其投射到FooEnum ; 它会立即成为合适的类型。

对象的实际类型确实是StatusEnum 。 编写Enum.Parse时的编译器和代码不知道在编写Enum.Parse时该运行时对象是什么。 直到实际调用该方法才会知道。