C#.NET 4.5中,Windows 10,我有以下枚舉:C#Enum.TryParse解析無效數字串
private enum Enums
{
A=1, B=2, C=3
}
,並將該軟件以一種非常奇怪的方式表現:
public static void Main()
{
Enums e;
if (Enum.TryParse("12", out e))
{
Console.WriteLine("Parsed {0}", e);
}
else
{
Console.Write("Not parsed");
}
Console.ReadLine();
}
我會期望TryParse方法的結果是錯誤的,但令我驚訝的是,控制檯顯示「Parsed 12」。 在Watch窗口中,它甚至顯示值爲「12」,並且它是Enums類型!
對於我嘗試過的任何數字字符串(例如「540」),但對於包含字母(「A12」,「12A」)的字符串不適用。
我可以很容易地克服這個問題,首先檢查它是否只是數字字符串,但爲什麼這是行爲? 是否由設計?
謝謝! 伊
是的,它是由設計。如果一個值上的'.ToString()'可以返回一個特定的字符串,並且所討論的類型有一個'.Parse()'方法,那麼parse方法應該接受該字符串,這是一個好主意。由於枚舉可以包含「未知」值(例如,在枚舉中沒有名稱的值),'.ToString()'會將這些值作爲字符串中的數字返回,所以它遵循'.Parse() '應該接受一個只包含整數的字符串。所以是的,這是設計。你可能不同意這個決定,但它是這樣的。 –