2011-08-11 22 views

Respuesta

56

Convert.ToBoolean(string) realmente llama bool.Parse() de todos modos, por lo que para string s no nulos, no hay diferencia funcional. (Para nulos string s, Convert.ToBoolean() devuelve false, mientras que bool.Parse() lanza una ArgumentNullException.)

Teniendo en cuenta este hecho, se debe utilizar bool.Parse() cuando esté seguro de que su entrada no es nula, ya que se ahorrará un cheque nulo.

Convert.ToBoolean(), por supuesto, tiene un número de otras sobrecargas que le permiten generar un bool de muchos otros tipos incorporados, mientras que Parse() es sólo para string s.

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

+1

FYI: El 'TryParse()' no es parte del Compact Framework. – jp2code

+0

Gracias por los detalles. Entonces, ¿no hay diferencia en el rendimiento entre los dos, o podrías decir ganancias extremadamente pequeñas usando Boolean.Parse (string)? – mbrownnyc

+1

@mbrownnyc Obtendrá una ganancia muy pequeña (probablemente imperceptible) utilizando 'Parse()' * si está seguro de que la entrada no es una cadena nula *. Si no está seguro, solo use 'ToBoolean()', ya que hará el control por usted. Y si no desea que una cadena nula resulte en falsa, realice la comprobación usted mismo, y luego llame a 'Parse()' si no es nulo. – dlev

2

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

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

18

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 TrueString bool y FalseString, pero tenga cuidado, porque bool.TrueString = "true", solamente bool.TrueString ==! "Verdadero"

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

'Convert.ToBoolean (" 1 "); // Format Exception' –

Cuestiones relacionadas