250 votes

Pourquoi ne Booléenne.ToString sortie de "Vrai" et pas de "vrai"

true.ToString() 
false.toString();

Output:
True
False

Est-il une raison valable pour qu'il soit "Vrai" et pas de "vrai"? Il se casse lors de l'écriture du XML XML de type booléen est inférieur cas, et n'est pas compatible avec le C#'s true/false (pas sûr de CLS).

Mise à jour

Voici mon tout hacky moyen de se déplacer en C# (pour une utilisation avec XML)

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

Bien sûr, qui ajoute 1 plus de la méthode de la pile, mais supprime ToLowers() partout.

175voto

Vojislav Stojkovic Points 4764

Seuls les gens de Microsoft peut vraiment répondre à cette question. Cependant, je tiens à offrir quelques faits amusants sur ;)

Tout d'abord, c'est ce qu'il dit dans MSDN sur les Booléens.ToString() méthode:

Valeur De Retour

Type: System.Chaîne

TrueString si la valeur de cette l'instance est vrai, ou FalseStringsi la valeur de cette instance est faux.

Remarques

Cette méthode retourne l' les constantes de "Vrai" ou "Faux". Notez que XML est sensible à la casse, et que le Spécification XML reconnaît "vrai" et les "faux" comme l'ensemble valide d' Les valeurs booléennes. Si l'objet String retourné par la méthode ToString() est écrite dans un fichier XML, son Chaîne de caractères.ToLower méthode doit être appelé en premier pour le convertir en minuscules.

Ici vient le plaisir fait #1: il ne renvoie pas TrueString ou FalseString à tous. Il utilise codé en dur littéraux "Vrai" et "Faux". Ne serait pas vous faire du bien si elle a utilisé les champs, parce qu'ils sont marqués comme étant en lecture seule, donc il n'y a pas de changement.

La méthode alternative, Booléenne.ToString(IFormatProvider) est encore plus drôle:

Remarques

Le fournisseur paramètre est réservé. Il ne participe pas à l'exécution de cette méthode. Cela signifie que la valeur de type Boolean.ToString(IFormatProvider) méthode, contrairement à la plupart des méthodes avec un fournisseur de paramètre, ne reflète pas la culture de paramètres spécifiques.

Quelle est la solution? Dépend exactement ce que vous essayez de faire. Quoiqu'il en soit, je parie qu'il aura besoin d'un hack ;)

108voto

stusmith Points 8588

...parce que l' .NET de l'environnement est conçu pour prendre en charge plusieurs langues.

Système.Boolean (en mscorlib.dll) est conçu pour être utilisé à l'interne par des langues à l'appui d'un type de données booléen. C# utilise les minuscules pour les mots-clés, d'où 'bool', 'true' et 'false'.

VB.NET cependant, les utilisations standard du boîtier: d'où 'Boolean', 'True' et 'False'.

Depuis les langues travailler ensemble, on ne pouvait pas avoir la valeur true.ToString() (C#) de donner un résultat différent de Vrai.ToString() (VB.NET). Le CLR concepteurs choisi le CLR standard boîtier de notation pour la ToString() de résultat.

La représentation de chaîne de la valeur booléenne true est défini pour être de type Boolean.TrueString.

(Il y a un cas similaire avec le Système.Chaîne: C# la présente comme la "chaîne").

56voto

bruno conde Points 28120

Pour Xml, vous pouvez utiliser XmlConvert.ToString méthode.

26voto

John Points 2343

C'est un code simple pour convertir en minuscules.

Pas si simple de convertir le "vrai" retour à la "Vraie", cependant.

true.ToString().ToLower() 

est ce que j'utilise pour une sortie xml.

8voto

Rune Grimstad Points 17775

Comment est-il pas compatible avec le C#? Boolean.Analyser et Boolean.TryParse est insensible à la casse et l'analyse se fait en comparant la valeur d'un Booléen.TrueString ou une valeur Booléenne.FalseString qui sont de "Vrais" et "Faux".

EDIT: en regardant la valeur de type Boolean.Méthode ToString dans le réflecteur, il s'avère que les chaînes de caractères sont codés en dur donc la méthode ToString est comme suit:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X