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

时间:2009-06-30 00:32:32

标签: c# .net-3.5 enums casting

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

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

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

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

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

3 个答案:

答案 0 :(得分:29)

无法进行演员表演。问题是用户定义的转换必须包含在结构或类声明中,并且转换必须是封闭类型或来自封闭类型。因此,

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<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);
    }
}

答案 1 :(得分:9)

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

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

答案 2 :(得分:0)

你也可以使用“StringValue”属性来获得你想要的东西。

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

欢呼声