無法投射。問題是用戶定義的轉換必須包含在結構或類聲明中,並且轉換必須是或來自於封閉類型。因此,
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