2012-03-16 24 views
38

Tengo un string que puede ser "0" o "1", y se garantiza que no será otra cosa.cómo convertir una cadena en un bool

Entonces la pregunta es: ¿cuál es la mejor, más simple y elegante manera de convertir esto a un bool?

Gracias.

+0

Si cualquiera de los valores inesperados pueden estar en la entrada, considere utilizar TryParse (http://stackoverflow.com/questions/18329001/parse-to-boolean-or-check-string-value/ 18329085 # 18329085) –

Respuesta

113

Muy simple hecho:

bool b = str == "1"; 
15
bool b = str.Equals("1")? true : false; 

O mejor aún, como se sugiere en un comentario a continuación:

bool b = str.Equals("1"); 
+28

Considero algo de la forma 'x? verdadero: falso' humorístico. –

+4

'bool b = str.Equals (" 1 ")' Funciona bien y es más intuitivo a primera vista. –

37

Haciendo caso omiso de las necesidades específicas de esta pregunta, y si bien nunca es un buen idea de lanzar una cadena a un bool, una forma sería usar el método ToBoolean() en la clase Convert:

bool boolVal = Convert.ToBoolean("true");

o un método de extensión para hacer lo mapeo raro que estás haciendo:

public static class MyStringExtensions 
{ 
    public static bool ToBoolean(this string value) 
    { 
     switch (value.ToLower()) 
     { 
      case "true": 
       return true; 
      case "t": 
       return true; 
      case "1": 
       return true; 
      case "0": 
       return false; 
      case "false": 
       return false; 
      case "f": 
       return false; 
      default: 
       throw new InvalidCastException("You can't cast a weird value to a bool!"); 
     } 
    } 
} 
+0

Comportamiento de Convert.ToBoolean que se muestra en http://stackoverflow.com/questions/7031964/what-is-the-difference-between-convert-tobooleanstring-and-boolean-parsestrin/26202581#26202581 –

5

hice algo un poco más extensible, montándose sobre el concepto de Mohammad Sepahvand:

public static bool ToBoolean(this string s) 
    { 
     string[] trueStrings = { "1", "y" , "yes" , "true" }; 
     string[] falseStrings = { "0", "n", "no", "false" }; 


     if (trueStrings.Contains(s, StringComparer.OrdinalIgnoreCase)) 
      return true; 
     if (falseStrings.Contains(s, StringComparer.OrdinalIgnoreCase)) 
      return false; 

     throw new InvalidCastException("only the following are supported for converting strings to boolean: " 
      + string.Join(",", trueStrings) 
      + " and " 
      + string.Join(",", falseStrings)); 
    } 
13

I sé que esto no responde a tu pregunta, sino solo para ayudar a otras personas. Si usted está tratando de convertir "verdadero" o cadenas "falsos" a Boolean:

Trate Boolean.Parse

bool val = Boolean.Parse("true"); ==> true 
bool val = Boolean.Parse("True"); ==> true 
bool val = Boolean.Parse("TRUE"); ==> true 
bool val = Boolean.Parse("False"); ==> false 
bool val = Boolean.Parse("1"); ==> Exception! 
bool val = Boolean.Parse("diffstring"); ==> Exception! 
+0

Necesario para un script de Powershell leyendo algunos datos XML y esto es perfecto! – Alternatex

2

Aquí está mi intento de la cadena más indulgente a bool conversión que sigue siendo útil, básicamente tecleando solo el primer personaje.

public static class StringHelpers 
{ 
    /// <summary> 
    /// Convert string to boolean, in a forgiving way. 
    /// </summary> 
    /// <param name="stringVal">String that should either be "True", "False", "Yes", "No", "T", "F", "Y", "N", "1", "0"</param> 
    /// <returns>If the trimmed string is any of the legal values that can be construed as "true", it returns true; False otherwise;</returns> 
    public static bool ToBoolFuzzy(this string stringVal) 
    { 
     string normalizedString = (stringVal?.Trim() ?? "false").ToLowerInvariant(); 
     bool result = (normalizedString.StartsWith("y") 
      || normalizedString.StartsWith("t") 
      || normalizedString.StartsWith("1")); 
     return result; 
    } 
} 
1

Utilicé el siguiente código para convertir una cadena en booleana.

Convert.ToBoolean(Convert.ToInt32(myString)); 
+0

No es necesario llamar a Convert.ToInt32 si las dos únicas posibilidades son "1" y "0". Si quiere considerar otros casos, var isTrue = Convert.ToBoolean ("true") == true && Convert.ToBoolean ("1"); // Son ambos verdaderos – TamusJRoyce

+0

Mire a Mohammad Sepahvand ¡responda el comentario de Michael Freidgeim! – TamusJRoyce

0
private static readonly ICollection<string> PositiveList = new Collection<string> { "Y", "Yes", "T", "True", "1", "OK" }; 

public static bool ToBoolean(this string input) 
{ 
       return input != null && PositiveList.Any(λ => λ.Equals(input, StringComparison.OrdinalIgnoreCase)); 
} 
Cuestiones relacionadas