Bor*_*eon 23 c# enums casting .net-3.5
我想在c#中从字符串到枚举之间进行明确的转换,以便得到:
(MyEnum) Enum.Parse(typeof(MyEnum),stringValue)
Run Code Online (Sandbox Code Playgroud)
我想把它驱逐到一个显式的强制转换操作符,我这样做但是没有用:
public static explicit operator (MyEnum)(value stringValue){
return (MyEnum) Enum.Parse(typeof(MyEnum),stringValue);
}
Run Code Online (Sandbox Code Playgroud)
你知道在C#中使用.NET 3.5是否可行?
jas*_*son 29
演员是不可能的.问题是用户定义的转换必须包含在结构或类声明中,并且转换必须是封闭类型或来自封闭类型.从而,
public static explicit operator MyEnum(string value)
Run Code Online (Sandbox Code Playgroud)
是不可能的,因为既不MyEnum是string也不可能是封闭的类型.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
是否有必要使用演员?另一种选择是从字符串中添加扩展方法:
public static class StringEnumConversion
{
public static T Convert<T>(this string str)
{
return (T)Enum.Parse(typeof(T), str);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16049 次 |
| 最近记录: |