Was ist der Unterschied zwischen Convert.ToBoolean (Zeichenfolge) und Boolean.Parse (Zeichenfolge)?


80

Was ist der Unterschied zwischen den beiden Methoden

Convert.ToBoolean()

und

Boolean.Parse()?

Gibt es einen Grund, den einen oder anderen zu benutzen?

Gibt es noch andere type.Parse()Methoden, auf die ich achten sollte?

Vielen Dank,

Matt

Antworten:


78

Convert.ToBoolean(string)ruft eigentlich bool.Parse()sowieso auf, also gibt es für Nicht-Nullen stringkeinen funktionalen Unterschied. (Gibt für null strings Convert.ToBoolean()zurück false, wohingegen bool.Parse()an ArgumentNullException.)

Angesichts dieser Tatsache sollten Sie verwenden, bool.Parse()wenn Sie sicher sind, dass Ihre Eingabe nicht null ist, da Sie sich eine Nullprüfung sparen.

Convert.ToBoolean()Natürlich gibt es eine Reihe anderer Überladungen, mit denen Sie boolaus vielen anderen integrierten Typen eine generieren können, während dies Parse()nur für strings gilt.

In Bezug auf type.Parse () -Methoden, auf die Sie achten sollten, haben alle integrierten numerischen Typen Parse()sowie TryParse()Methoden. DateTimehat diese sowie die zusätzlichen ParseExact()/ TryParseExact()Methoden, mit denen Sie ein erwartetes Format für das Datum angeben können.


Danke für die Details. Es gibt also keinen Unterschied in der Leistung zwischen den beiden, oder Sie könnten sagen, extrem kleine Gewinne durch die Verwendung von Boolean.Parse (Zeichenfolge)?
mbrownnyc

1
@mbrownnyc Sie würden einen sehr geringen (wahrscheinlich nicht wahrnehmbaren) Gewinn erzielen, Parse() wenn Sie sicher sind, dass die Eingabe keine Nullzeichenfolge ist . Wenn Sie sich nicht sicher sind, verwenden Sie einfach ToBoolean(), da dies die Prüfung für Sie erledigt. Und wenn Sie nicht möchten, dass eine Nullzeichenfolge zu false führt, führen Sie die Überprüfung selbst durch und rufen Parse()Sie dann auf, wenn sie nicht null ist.
dlev

34

Hier ist die kurze Demo:

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

Hinweis: Es gibt auch zwei Eigenschaften von boolTrueString und FalseString. Seien Sie jedoch vorsichtig, da bool.TrueString != "true"nurbool.TrueString == "True"

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

2
Convert.ToBoolean("1"); // Format Exception
Robert McKee

3

Boolean.Parse()konvertiert eine Zeichenfolgendarstellung eines logischen booleschen Werts in einen booleschen Wert. Convert.ToBoolean()hat mehrere Überladungen , die primitive Typen in ihre booleschen Entsprechungen konvertieren.

Den meisten, wenn nicht allen primitiven Typen in C # ist eine * .Parse / Convert.To * -Methode zugeordnet, die denselben Zweck erfüllt wie Boolean.Parse()/Convert.ToBoolean().

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.