variable false example column addwithvalue .net boolean

.net - false - parameters addwithvalue null



Convert.ToBoolean y Boolean.Parse no aceptan 0 y 1 (6)

¿Qué hace que los booleanos sean especiales? Son esencialmente 0 como falsos, y no cero como verdaderos en mi experiencia ...

Ese es un detalle de implementación, y no es del todo relevante.

true es un valor booleano. false es un valor booleano. Cualquier otra cosa no lo es.

Si desea analizar algo como que la cadena "0" evalúa false mientras que cualquier otra cosa se evalúa como true , puede usar:

!mystr.Equals("0");

¿Por qué se decidió que al analizar un valor booleano, 0/1 no es aceptable?

Al analizar cualquier valor de tipo entero, acepta cadenas numéricas para ser analizadas. (Y si .NET puede analizar la cadena "Cien millones doscientos sesenta y cinco mil ochocientos sesenta y cinco" me sorprendería).

¿Qué hace que los booleanos sean especiales? Son esencialmente 0 como falsos, y no cero como verdaderos en mi experiencia ...

¿Existe un método bcl para analizar una cadena como esta, y si no, ¿por qué?

Nota: Olvidé especificar en una cadena "0" y "1". Aunque es curioso que si ya funciona un int funciona como anticipé. Tal vez esto causó la confusión.


¿Qué tal esto?

byte i = 1; //or 0 bool myBool = BitConverter.ToBoolean(new byte[] { i }, 0)


0 y (no cero) no son iguales a "falso" y "verdadero", son solo la representación elegida por C. Otros lenguajes usan 0 para verdadero y -1 para falso, u otros esquemas por completo. Un booleano no es un 0 o un 1, es un verdadero o un falso.

¿Debería también manejar "sí" y "no", "apagar" y "encender", y todas las otras muchas cosas que son análogas a los booleanos? ¿Dónde dibujarías la línea?


Desafortunadamente, esto sucede mucho en .NET. Por ejemplo, no recuerdo si es XML Serializer o XmlConvert, pero uno de ellos falla si la carcasa de Verdadero / Falso no es correcta.

Puede redondear el viaje a través de enteros para obtener lo que desea.

string s = "2"; int i = Convert.ToInt32(s); bool b = Convert.ToBoolean(i);

En el caso anterior, cualquier cosa que no sea cero se evaluará como verdadera.

Por este motivo, creé una clase que utilizo en todo el sistema llamado ConversionStrategy que tiene en cuenta el tipo de origen y el tipo de destino y elige la estrategia de conversión más ideal (y flexible) para realizar la conversión.


Desea Convert.ToBoolean(int value) no está seguro de qué pasa con los métodos Parse :-)

Código para ningún propósito útil:

int falseInt = 0; int trueInt = 1; bool falseBool; bool trueBool; if (bool.TryParse(falseInt.ToString(), out falseBool)) { if (!falseBool) { MessageBox.Show("TryParse: False"); } } if (bool.TryParse(trueInt.ToString(), out trueBool)) { if (!trueBool) { MessageBox.Show("TryParse: True"); } } falseBool = Convert.ToBoolean(falseInt); trueBool = Convert.ToBoolean(trueInt); if (!falseBool) { MessageBox.Show("Convert: False"); } if (trueBool) { MessageBox.Show("Convert: True"); }


La clase compartida FormatHelper muestra a continuación proporciona una solución simple que utiliza dos variaciones de un método sobrecargado llamado StringToBoolean .

FormatHelper.StringToBoolean(String value) FormatHelper.StringToBoolean(String value, Boolean NullOrEmptyDefault)

Ambas variaciones proporcionan una coincidencia de cadena insensible al caso

1) La conversión normal de cadena a booleano, por defecto, o cadenas nulas a false

Los siguientes ejemplos darán como resultado un valor boolean de false :

Boolean myBool = FormatHelper.StringToBoolean(""); Boolean myBool = FormatHelper.StringToBoolean("0"); Boolean myBool = FormatHelper.StringToBoolean("false"); Boolean myBool = FormatHelper.StringToBoolean("False"); Boolean myBool = FormatHelper.StringToBoolean("no"); Boolean myBool = FormatHelper.StringToBoolean("off");

Todos los demás valores de cadena darán como resultado un valor Boolean true , como por ejemplo:

Boolean myBool = FormatHelper.StringToBoolean("1"); Boolean myBool = FormatHelper.StringToBoolean("true"); Boolean myBool = FormatHelper.StringToBoolean("True"); Boolean myBool = FormatHelper.StringToBoolean("yes"); Boolean myBool = FormatHelper.StringToBoolean("xyz blah");

Nota: Edite el valor de BooleanStringOff en la clase a continuación para incluir más (o menos) valores para falso / apagado

2) Sigue las mismas reglas que 1) anteriores, pero permite que se proporcione un valor predeterminado de true como el segundo argumento de la conversión.

El valor predeterminado se utiliza cuando el valor de la String está vacío o null . Esto es útil si un valor de cadena faltante necesita significar un estado true .

El siguiente ejemplo de código devolverá true

Boolean myBool = FormatHelper.StringToBoolean("",true);

El siguiente ejemplo de código devolverá false

Boolean myBool = FormatHelper.StringToBoolean("false",true);

Este es el código para la clase FormatHelper

public class FormatHelper { public static Boolean StringToBoolean(String str) { return StringToBoolean(str, false); } public static Boolean StringToBoolean(String str, Boolean bDefault) { String[] BooleanStringOff = { "0", "off", "no" }; if (String.IsNullOrEmpty(str)) return bDefault; else if(BooleanStringOff.Contains(str,StringComparer.InvariantCultureIgnoreCase)) return false; Boolean result; if (!Boolean.TryParse(str, out result)) result = true; return result; } }