variable una true que false declarar como booleana bool c# .net boolean

una - true false c#



¿Por qué Boolean.ToString produce "True" y no "true" (8)

¿Cómo no es compatible con C #? Boolean.Parse y Boolean.TryParse no distinguen entre mayúsculas y minúsculas y el análisis se realiza comparando el valor con Boolean.TrueString o Boolean.FalseString que son "True" y "False".

EDITAR: Al observar el método Boolean.ToString en el reflector, resulta que las cadenas están codificadas de forma rígida, por lo que el método ToString es el siguiente:

public override string ToString() { if (!this) { return "False"; } return "True"; }

true.ToString() false.toString(); Output: True False

¿Hay una razón válida para que sea "Verdadero" y no "verdadero"? Se rompe cuando la escritura de XML como tipo booleano de XML es minúscula , y tampoco es compatible con el verdadero / falso de C # (aunque no estoy seguro de CLS).

Actualizar

Esta es mi manera muy intrincada de evitarlo en C # (para usar con XML)

internal static string ToXmlString(this bool b) { return b.ToString().ToLower(); }

Por supuesto, eso agrega 1 método más a la pila, pero elimina ToLowers () en todas partes.


... porque el entorno .NET está diseñado para soportar muchos idiomas.

System.Boolean (en mscorlib.dll) está diseñado para ser utilizado internamente por los idiomas para admitir un tipo de datos booleano. C # usa todas las minúsculas para sus palabras clave, por lo tanto, ''bool'', ''true'' y ''false''.

Sin embargo, VB.NET utiliza una carcasa estándar: por lo tanto, ''Boolean'', ''True'' y ''False''.

Como los idiomas tienen que trabajar juntos, no se puede tener true.ToString () (C #) dando un resultado diferente a True.ToString () (VB.NET). Los diseñadores de CLR eligieron la notación de carcasa de CLR estándar para el resultado ToString ().

La representación de cadena del verdadero booleano se define como Boolean.TrueString.

(Hay un caso similar con System.String: C # lo presenta como el tipo ''cadena'').


Es un código simple para convertir eso a minúsculas.

Sin embargo, no es tan sencillo convertir "true" de nuevo a "True".

true.ToString().ToLower()

Es lo que uso para la salida xml.


Esto probablemente se remonta a los antiguos días VB NOT .Net cuando bool.ToString produjo True o False.


La razón por la que true es "Verdadero" se debe al fuerte vínculo de Microsoft con los estándares XML.

De Wikipedia : "El lenguaje de marcado extensible (XML) es un lenguaje de marcado que define un conjunto de reglas para codificar documentos en un formato que es legible para los humanos y para la máquina".

La lectura humana es subjetiva, pero a los ojos de XML, se prefiere usar la palabra "Uno" en lugar de un número "1". Notará que esto sucede utilizando enumeraciones, ya que la palabra se serializa en lugar de su valor ("FirstOption" en lugar de "0" o "1").

Del mismo modo, el texto comúnmente sigue CamelCasing . Por lo tanto, en lugar de "cadena", XML prefiere "cadena". Esta es la razón por la que Boolean.TrueString es "True" y Boolean.FalseString es "False" de forma predeterminada.



Sé que la razón por la que es así ya se ha abordado, pero cuando se trata de un formato booleano "personalizado", tengo dos métodos de extensión sin los cuales no puedo vivir :-)

public static class BoolExtensions { public static string ToString(this bool? v, string trueString, string falseString, string nullString="Undefined") { return v == null ? nullString : v.Value ? trueString : falseString; } public static string ToString(this bool v, string trueString, string falseString) { return ToString(v, trueString, falseString, null); } }

El uso es trivial. Lo siguiente convierte varios valores bool a sus representaciones portuguesas:

string verdadeiro = true.ToString("verdadeiro", "falso"); string falso = false.ToString("verdadeiro", "falso"); bool? v = null; string nulo = v.ToString("verdadeiro", "falso", "nulo");


Solo las personas de Microsoft pueden realmente responder esa pregunta. Sin embargo, me gustaría ofrecer algunos datos divertidos al respecto;)

Primero, esto es lo que dice en MSDN sobre el método Boolean.ToString () :

Valor de retorno

Tipo: System.String

TrueString si el valor de esta instancia es verdadero, o FalseString si el valor de esta instancia es falso.

Observaciones

Este método devuelve las constantes "Verdadero" o "Falso". Tenga en cuenta que XML distingue entre mayúsculas y minúsculas, y que la especificación XML reconoce "verdadero" y "falso" como el conjunto válido de valores booleanos. Si el objeto String devuelto por el método ToString () se va a escribir en un archivo XML, se debe llamar primero a su método String.ToLower para convertirlo en minúsculas.

Aquí viene el hecho divertido # 1: no devuelve TrueString o FalseString en absoluto. Utiliza literales codificados "Verdadero" y "Falso". No te serviría de nada si utilizara los campos, porque están marcados como de solo lectura, por lo que no hay que cambiarlos.

El método alternativo, Boolean.ToString (IFormatProvider) es aún más divertido:

Observaciones

El parámetro del proveedor está reservado. No participa en la ejecución de este método. Esto significa que el método Boolean.ToString (IFormatProvider), a diferencia de la mayoría de los métodos con un parámetro de proveedor, no refleja la configuración específica de la cultura.

¿Cual es la solución? Depende de lo que está tratando de hacer exactamente. Sea lo que sea, apuesto a que requerirá un hackeo;)