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
Odpowiedzi:
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żyj ToBoolean()
, 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
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()
.