2つの方法の違いは何ですか
Convert.ToBoolean()
そして
Boolean.Parse()
?
どちらかを使用する理由はありますか?
さらに、他type.Parse()
に注意すべき方法はありますか?
ありがとう、
マット
回答:
Convert.ToBoolean(string)
bool.Parse()
とにかく実際に呼び出すので、null以外string
の場合、機能的な違いはありません。(nullstring
の場合、をConvert.ToBoolean()
返しますfalse
が、をbool.Parse()
スローしArgumentNullException
ます。)
その事実を考えるとbool.Parse()
、入力がnullでないことが確実な場合に使用する必要があります。これは、nullチェックを1つ保存するためです。
Convert.ToBoolean()
もちろん、他のbool
多くの組み込み型からを生成できるようにする他の多くのオーバーロードがありますが、Parse()
はstring
s専用です。
注意すべきtype.Parse()メソッドに関しては、すべての組み込み数値型にはメソッドParse()
と同様にありTryParse()
ます。DateTime
これらと、日付の予想される形式を指定できる追加のParseExact()
/TryParseExact()
メソッドがあります。
Parse()
入力がヌル文字列ではないことが確実な場合は、を使用することで、ごくわずかな(おそらく知覚できない)ゲインが得られます。よくわからない場合ToBoolean()
は、を使用してください。チェックが行われます。また、null文字列がfalseになることを望まない場合は、自分でチェックを実行し、Parse()
nullでない場合は呼び出します。
これが短いデモです:
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が、しかし、注意してくださいbool.TrueString != "true"
、だけbool.TrueString == "True"
Console.WriteLine(bool.TrueString); // True
Console.WriteLine(bool.FalseString); // False
Convert.ToBoolean("1"); // Format Exception