无法投射。问题是用户定义的转换必须包含在结构或类声明中,并且转换必须是或来自于封闭类型。因此,
public static explicit operator MyEnum(string value)
是不可能的,因为既不MyEnum
也不string
可以永远是封闭类型。
在ECMA334 C#规范的相关部分是17.9.4:
A转换算子从源类型,由参数类型转换 操作者的指示,到目标类型,由返回指示转换转换运算符的类型。只有在以下所有条件都成立的情况下,才允许声明从源类型S到目标类型T的转换的类或结构为 ,其中S0和T0是删除尾随类型所产生的类型。如果有的话,来自S和T的修饰符:
S0和T0是不同的类型。
S0或T0是运算符声明发生的类或结构类型。
S0和T0都不是接口类型。
剔除用户定义的转换,转换不存在从S到T或从T到S.
然而,可以执行对字符串类的扩展方法。
public static class StringExtensions {
public static T ConvertToEnum<T>(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);
}
}
很好的回答!我知道我曾经在某处看过它,但不记得如何解决这个问题。谢谢! – 2012-01-27 20:34:01