¿Por qué Boolean.ToString genera "True" y no "true"?

Resuelto Chris S asked hace 15 años • 7 respuestas
true.ToString() 
false.toString();

Output:
True
False

¿Existe una razón válida para que sea "Verdadero" y no "verdadero"? Se rompe al escribir XML ya que el tipo booleano de XML está en minúsculas y tampoco es compatible con verdadero/falso de C# (aunque no estoy seguro acerca de CLS).

Actualizar

Aquí está mi forma muy ingeniosa de solucionarlo 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.

Chris S avatar Jan 29 '09 19:01 Chris S
Aceptado

Sólo la gente de Microsoft puede realmente responder a 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: Sistema.Cadena

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, primero se debe llamar a su método String.ToLower para convertirlo a minúsculas.

Aquí viene el dato curioso número 1: no devuelve TrueString o FalseString en absoluto. Utiliza literales codificados "Verdadero" y "Falso". No le serviría de nada si usara los campos, porque están marcados como de solo lectura, por lo que no se pueden cambiar.

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 configuraciones específicas de la cultura.

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

Vojislav Stojkovic avatar Jan 29 '2009 12:01 Vojislav Stojkovic

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

System.Boolean (en mscorlib.dll) está diseñado para que los idiomas lo utilicen internamente para admitir un tipo de datos booleano. C# utiliza todas las minúsculas para sus palabras clave, por lo tanto, "bool", "verdadero" y "falso".

Sin embargo, VB.NET utiliza mayúsculas y minúsculas estándar: de ahí 'Boolean', 'True' y 'False'.

Dado que los lenguajes tienen que funcionar juntos, no es posible que true.ToString() (C#) dé un resultado diferente a True.ToString() (VB.NET). Los diseñadores de CLR eligieron la notación de mayúsculas y minúsculas CLR estándar para el resultado de ToString().

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

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

stusmith avatar Jan 29 '2009 12:01 stusmith

Para Xml puede utilizar el método XmlConvert.ToString .

bruno conde avatar Jan 29 '2009 12:01 bruno conde