Jaka jest różnica między tymi dwiema metodami
Convert.ToBoolean()
i
Boolean.Parse()
?
Czy jest jakiś powód, aby używać jednego lub drugiego?
Czy są też inne type.Parse()
metody, na które powinienem uważać?
Dzięki,
Matt
Convert.ToBoolean(string)
w rzeczywistości i bool.Parse()
tak wywołuje , więc dla string
s niezerowych nie ma różnicy funkcjonalnej. (W przypadku null string
s Convert.ToBoolean()
zwraca false
, podczas gdy bool.Parse()
zgłasza ArgumentNullException
.)
Biorąc pod uwagę ten fakt, powinieneś używać, bool.Parse()
gdy jesteś pewien, że twoje dane wejściowe nie są zerowe, ponieważ oszczędzasz sobie jedną kontrolę zerową.
Convert.ToBoolean()
oczywiście ma szereg innych przeciążeń, które pozwalają wygenerować a bool
z wielu innych wbudowanych typów, podczas gdy Parse()
jest string
to tylko dla s.
Jeśli chodzi o metody type.Parse (), na które powinieneś zwrócić uwagę, wszystkie wbudowane typy liczbowe mają Parse()
również TryParse()
metody. DateTime
ma te, a także dodatkowe ParseExact()
/ TryParseExact()
metody, które pozwalają określić oczekiwany format daty.
Parse()
jeśli masz pewność, że dane wejściowe nie są ciągiem zerowym . Jeśli nie jesteś pewien, po prostu użyjToBoolean()
, ponieważ zrobi to za Ciebie. A jeśli nie chcesz, aby pusty łańcuch skutkował fałszem, wykonaj sprawdzenie samodzielnie, a następnie wywołaj,Parse()
jeśli nie jest pusty.Oto krótkie 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
Uwaga: istnieją również dwie właściwości
bool
TrueString i FalseString, ale bądź ostrożny, ponieważbool.TrueString != "true"
tylkobool.TrueString == "True"
Console.WriteLine(bool.TrueString); // True Console.WriteLine(bool.FalseString); // False
źródło
Convert.ToBoolean("1"); // Format Exception
Boolean.Parse()
zamieni ciąg znaków reprezentujący logiczną wartość boolowską na wartość logiczną.Convert.ToBoolean()
ma wiele przeciążeń , które konwertują typy pierwotne na ich logiczne odpowiedniki.Większość typów pierwotnych w języku C #, jeśli nie wszystkie, ma skojarzoną metodę * .Parse / Convert.To *, która służy do tego samego celu, co
Boolean.Parse()/Convert.ToBoolean()
.źródło