¿Cuál es la diferencia entre Convert.ToBoolean (cadena) y Boolean.Parse (cadena)?

80

¿Cuál es la diferencia entre los dos métodos?

Convert.ToBoolean()

y

Boolean.Parse()?

¿Hay alguna razón para usar uno u otro?

Además, ¿hay otros type.Parse()métodos que deba tener en cuenta?

Gracias,

Mate

mbrownnyc
fuente

Respuestas:

79

Convert.ToBoolean(string)en realidad llama de bool.Parse()todos modos, por lo que para s no nulos string, no hay diferencia funcional. (Para strings nulos , Convert.ToBoolean()devuelve false, mientras que bool.Parse()arroja an ArgumentNullException.)

Dado ese hecho, debe usarlo bool.Parse()cuando esté seguro de que su entrada no es nula, ya que se ahorra una verificación nula.

Convert.ToBoolean()por supuesto, tiene una serie de otras sobrecargas que le permiten generar un a boolpartir de muchos otros tipos integrados, mientras que Parse()es stringsolo para s.

En términos de type.Parse () métodos que usted debe tener en cuenta, toda la incorporada en los tipos numéricos tienen Parse(), así como TryParse()métodos. DateTimetiene esos, así como los métodos ParseExact()/ adicionales TryParseExact(), que le permiten especificar un formato esperado para la fecha.

dlev
fuente
Gracias por los detalles. Entonces, no hay diferencia en el rendimiento entre los dos, o podría decir ganancias extremadamente pequeñas al usar Boolean.Parse (string)?
mbrownnyc
1
@mbrownnyc Obtendría una ganancia muy pequeña (probablemente imperceptible) Parse() si usa si está seguro de que la entrada no es una cadena nula . Si no está seguro, utilícelo ToBoolean(), ya que hará la verificación por usted. Y si no desea que una cadena nula dé como resultado falso, realice la verificación usted mismo y luego llame Parse()si no es nula.
dlev
34

Aquí está la breve demostración:

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

Nota: También hay dos propiedades de boolTrueString y FalseString, pero tenga cuidado, porque bool.TrueString != "true"solobool.TrueString == "True"

Console.WriteLine(bool.TrueString); // True
Console.WriteLine(bool.FalseString); // False
Sergey Malyutin
fuente
2
Convert.ToBoolean("1"); // Format Exception
Robert McKee
3

Boolean.Parse()convertirá una representación de cadena de un valor booleano lógico en un valor booleano. Convert.ToBoolean()tiene múltiples sobrecargas que convertirán tipos primitivos en su equivalente booleano.

La mayoría, si no todos, de los tipos primitivos en C # tienen un método * .Parse / Convert.To * asociado que tiene el mismo propósito que Boolean.Parse()/Convert.ToBoolean().

csano
fuente