为什么Enum.Parse()返回对象?
关于将字符串转换为枚举值有很多问题。 一般来说,答案看起来像这个问题的答案:
StatusEnum MyStatus = (StatusEnum) Enum.Parse( typeof(StatusEnum), "Active", true );
虽然这是一个非常合理的答案,并且您可以编写一个简化调用的方法,但它没有回答为什么 Enum.Parse()返回一个object
而不是相应的枚举值的问题。 为什么我必须将其StatusEnum
为StatusEnum
?
编辑:
基本上,问题是为什么这样的函数不是Enum类的一部分?
public static T Parse(string value) where T: struct { return (T)Enum.Parse(typeof (T), value); }
这个function完美无缺,完全符合您的期望。 StatusEnum e = Enum.Parse("Active");
。
这样做是因为
- 它早于仿制药(即使它没有:)
- 通用约束不能是枚举(在主流.NET语言中)
因此, Object
是唯一一种适用于任何类型enum
类型。
通过返回对象,API至少是可用的,即使需要强制转换。
但是,TryParse支持类型参数:
Enum.TryParse
因此,如果指定out值为FooEnum ret;
,之后您不需要将其投射到FooEnum
; 它会立即成为合适的类型。
对象的实际类型确实是StatusEnum
。 编写Enum.Parse
时的编译器和代码不知道在编写Enum.Parse
时该运行时对象是什么。 直到实际调用该方法才会知道。