web-dev-qa-db-ja.com

Convert.ToBoolean(string)とBoolean.Parse(string)の違いは何ですか?

2つの方法の違いは何ですか

Convert.ToBoolean()

そして

Boolean.Parse()

どちらかを使用する理由はありますか?

また、他に注意すべきtype.Parse()メソッドはありますか?

おかげで、

マット

73
mbrownnyc

Convert.ToBoolean(string)は実際にbool.Parse()を呼び出します。そのため、null以外のstringsの場合、機能的な違いはありません。 (null stringsの場合、Convert.ToBoolean()falseを返しますが、bool.Parse()ArgumentNullExceptionをスローします。)

その事実を考えると、1つのnullチェックを保存するため、入力がnullでないことが確実な場合はbool.Parse()を使用する必要があります。

Convert.ToBoolean()にはもちろん、他の多くの組み込み型からboolを生成できる他のオーバーロードがいくつかありますが、Parse()strings専用です。

Type.Parse()メソッドに注目すると、すべての組み込み数値型にはParse()メソッドとTryParse()メソッドがあります。 DateTimeには、これらと、追加のParseExact()/TryParseExact()メソッドがあり、日付の予想される形式を指定できます。

72
dlev

これは短いデモです:

object ex1 = "True";
Console.WriteLine(Convert.ToBoolean(ex1)); // True
Console.WriteLine(bool.Parse(ex1.ToString())); // True

object ex2 = "true";
Console.WriteLine(Convert.ToBoolean(ex2)); // True
Console.WriteLine(bool.Parse(ex2.ToString())); // True

object ex3 = 1;
Console.WriteLine(Convert.ToBoolean(ex3)); // True
Console.WriteLine(bool.Parse(ex3.ToString())); // Unhandled Exception: System.FormatException

object ex3 = "1";
Console.WriteLine(Convert.ToBoolean(ex3)); // An unhandled exception of type 'System.FormatException' occurred
Console.WriteLine(bool.Parse(ex3.ToString())); // Unhandled Exception: System.FormatException

object ex4 = "False";
Console.WriteLine(Convert.ToBoolean(ex4)); // False
Console.WriteLine(bool.Parse(ex4.ToString())); // False

object ex5 = "false";
Console.WriteLine(Convert.ToBoolean(ex5)); // False
Console.WriteLine(bool.Parse(ex5.ToString())); // False

object ex6 = 0;
Console.WriteLine(Convert.ToBoolean(ex6)); // False
Console.WriteLine(bool.Parse(ex6.ToString())); // Unhandled Exception: System.FormatException

object ex7 = null;
Console.WriteLine(Convert.ToBoolean(ex7)); // False
Console.WriteLine(bool.Parse(ex7.ToString())); // Unhandled Exception: System.NullReferenceException

注:bool TrueStringとFalseStringの2つのプロパティもありますが、bool.TrueString != "true"、のみbool.TrueString == "True"

Console.WriteLine(bool.TrueString); // True
Console.WriteLine(bool.FalseString); // False
28
Sergey Malyutin

Boolean.Parse()は、論理ブール値の文字列表現をブール値に変換します。 Convert.ToBoolean()には複数の オーバーロード があり、プリミティブ型を同等のブール型に変換します。

すべてではありませんが、C#のほとんどのプリミティブ型には、Boolean.Parse()/Convert.ToBoolean()と同じ目的を果たす* .Parse/Convert.To *メソッドが関連付けられています。

3
csano