C#.NET 4.5、Windowsの10、I以下の列挙型があります。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();
}
I TryParseメソッドの結果は偽であると予想しますが、驚いたことに コンソールには "Parsed 12"と表示されます。 ウォッチウィンドウでは、値が "12"でEnumsタイプであることも表示されます。
これは試した番号の文字列(「540」など)には該当しますが、文字列(「A12」、「12A」)には該当しません。
数字だけの文字列かどうかを最初に確認することで、これを簡単に解決できますが、なぜこれが動作ですか? これは仕様ですか?
ありがとうございます! イド
はい、仕様です。値の '.ToString()'が特定の文字列を返すことができ、問題の型が '.Parse()'メソッドを持っている場合、parseメソッドはその文字列を受け入れるべきです。 enumは "未知"の値(つまりenumに名前を持たない値)を保持することができ、 '.ToString()'は文字列中の数値としてこれらを返します。 '.Parse() 'は整数だけを保持する文字列を受け付けるべきです。はい、これは設計によるものです。あなたはこの決定に同意しないかもしれませんが、それはそれです。 –