C#显式转换为枚举的字符串

我希望在c#中从字符串到枚举之间进行明确的转换,以便得到:

(MyEnum) Enum.Parse(typeof(MyEnum),stringValue) 

我想把它驱逐到一个显式的强制转换操作符,我这样做但是没有用:

 public static explicit operator (MyEnum)(value stringValue){ return (MyEnum) Enum.Parse(typeof(MyEnum),stringValue); } 

你知道在C#中使用.NET 3.5是否可行?

演员是不可能的。 问题是用户定义的转换必须包含在结构或类声明中,并且转换必须是封闭类型或来自封闭类型。 从而,

 public static explicit operator MyEnum(string value) 

是不可能的,因为MyEnumstring都不能成为封闭类型。

ECMA334 C#规范的相关部分是17.9.4:

转换运算符从源类型(由转换运算符的参数类型指示)转换为目标类型,由转换运算符的返回类型指示。 只有当以下所有条件都为真时,才允许类或结构声明从源类型S到目标类型T的转换,其中S0和T0是从删除尾部得到的类型? 来自S和T的修饰符(如果有):

S0和T0是不同的类型。

S0或T0是发生运算符声明的类或结构类型

S0和T0都不是接口类型。

排除用户定义的转换,从S到T或从T到S不存在转换。

但是,您可以对字符串类执行扩展方法。

 public static class StringExtensions { public static T ConvertToEnum(this string value) { Contract.Requires(typeof(T).IsEnum); Contract.Requires(value != null); Contract.Requires(Enum.IsDefined(typeof(T), value)); return (T)Enum.Parse(typeof(T), value); } } 

是否有必要使用演员? 另一种选择是从字符串中添加扩展方法:

 public static class StringEnumConversion { public static T Convert(this string str) { return (T)Enum.Parse(typeof(T), str); } } 

您还可以使用“StringValue”属性来获得所需内容。

看看这个问题: stackoverflow.com/questions/424366/c-string-enums ,那里有很多可能有帮助的信息。

干杯