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.
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.
Muy simple hecho:
bool b = str == "1";
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");
Considero algo de la forma 'x? verdadero: falso' humorístico. –
'bool b = str.Equals (" 1 ")' Funciona bien y es más intuitivo a primera vista. –
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!");
}
}
}
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 –
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));
}
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!
Necesario para un script de Powershell leyendo algunos datos XML y esto es perfecto! – Alternatex
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;
}
}
Utilicé el siguiente código para convertir una cadena en booleana.
Convert.ToBoolean(Convert.ToInt32(myString));
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
Mire a Mohammad Sepahvand ¡responda el comentario de Michael Freidgeim! – TamusJRoyce
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));
}
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) –