true.ToString()
false.toString();
Output:
True
False
Y a-t-il une raison valable pour qu'elle soit "vraie" et non "vraie"? Il casse lors de l'écriture de XML car le type booléen de XML est en minuscules et n'est également pas compatible avec le vrai / faux de C # (cependant pas sûr de CLS).
Mettre à jour
Voici ma façon très hacky de le contourner en C # (pour une utilisation avec XML)
internal static string ToXmlString(this bool b)
{
return b.ToString().ToLower();
}
Bien sûr, cela ajoute 1 méthode de plus à la pile, mais supprime ToLowers () partout.
return b.ToString().ToLower();
parreturn b ? "true" : "false";
. Plus propre, plus efficace, moins dépendant d'une méthode qui pourrait théoriquement dépendre des paramètres régionaux (même si ce n'est pas le cas dans les implémentations actuelles).Réponses:
Seuls les gens de Microsoft peuvent vraiment répondre à cette question. Cependant, je voudrais offrir quelques faits amusants à ce sujet;)
Tout d'abord, voici ce qu'elle dit dans MSDN à propos de la méthode Boolean.ToString () :
Voici le fait amusant n ° 1: il ne retourne pas du tout TrueString ou FalseString. Il utilise des littéraux codés en dur "True" et "False". Cela ne vous servirait à rien s'il utilisait les champs, car ils sont marqués comme étant en lecture seule, il n'y a donc pas de changement.
La méthode alternative, Boolean.ToString (IFormatProvider) est encore plus drôle:
Quelle est la solution? Cela dépend exactement de ce que vous essayez de faire. Quoi qu'il en soit, je parie qu'il faudra un hack;)
la source
Boolean.ToString()
.bool.TrueString
est un champ en lecture seule qui contient le littéral codé en dur "True" . Par conséquent, dire qu'il renvoie revientTrueString
à dire qu'il renvoie le littéral codé en dur "True" qui y est stocké, étant donné que le retour d'une chaîne renvoie toujours la valeur et non une référence.TrueString
est changé, disons, en "vrai" en minuscules, la méthodebool.ToString()
renverra toujours le littéral pascal "vrai".... car l'environnement .NET est conçu pour prendre en charge de nombreuses langues.
System.Boolean (dans mscorlib.dll) est conçu pour être utilisé en interne par les langues pour prendre en charge un type de données booléen. C # utilise tous les minuscules pour ses mots clés, d'où «bool», «true» et «false».
VB.NET utilise cependant une casse standard: d'où «booléen», «vrai» et «faux».
Étant donné que les langages doivent fonctionner ensemble, vous ne pouvez pas avoir true.ToString () (C #) donnant un résultat différent de True.ToString () (VB.NET). Les concepteurs CLR ont choisi la notation de casse CLR standard pour le résultat ToString ().
La représentation sous forme de chaîne du booléen true est définie comme étant Boolean.TrueString.
(Il y a un cas similaire avec System.String: C # le présente comme le type 'string').
la source
ToString()
et il a été obligé d'utiliser commeIf(b, "True", "False")
. Donc, l'utilisateur c # comme moi doit sacrifier pour utiliserToLower()
:)Pour Xml, vous pouvez utiliser la méthode XmlConvert.ToString .
la source
C'est un code simple pour convertir cela en minuscules.
Cependant, il n'est pas si simple de reconvertir "vrai" en "vrai".
est ce que j'utilise pour la sortie xml.
la source
ToString()
résultat booléen .ToLowerInvariant()
.Comment n'est-il pas compatible avec C #? Boolean.Parse et Boolean.TryParse est insensible à la casse et l'analyse est effectuée en comparant la valeur à Boolean.TrueString ou Boolean.FalseString qui sont "True" et "False".
EDIT: Lorsque vous regardez la méthode Boolean.ToString dans le réflecteur, il s'avère que les chaînes sont codées en dur, la méthode ToString est donc la suivante:
la source
That's probably the only context in C# where the construct "if (!this)" is valid!
Vous m'avez défié, vous perdez . gist.github.com/Steinblock/10df18afb948866be1ba - C'est également aujourd'hui le 200e anniversaire de George Boolereturn this ? "True" : "False";
? (Un autre cas inhabituel car vous ne voyez pas souventthis
comme une?:
condition, mais ici, cela aurait du sens.)Je sais que la raison pour laquelle c'est ainsi a déjà été abordée, mais en ce qui concerne le formatage booléen "personnalisé", j'ai deux méthodes d'extension dont je ne peux plus me passer :-)
L'utilisation est triviale. Les éléments suivants convertissent diverses valeurs booléennes en leurs représentations portugaises:
la source
La raison
true
est "True" en raison du lien fort de Microsoft avec les normes XML.Extrait de Wikipédia : "Extensible Markup Language (XML) est un langage de balisage qui définit un ensemble de règles pour coder les documents dans un format qui est à la fois lisible par l'homme et machine."
Lisible par l'homme est subjectif, mais aux yeux de XML, il est préférable d'utiliser le mot "Un" à la place du chiffre "1". Vous remarquerez que cela se produit en utilisant des énumérations, car le mot est sérialisé au lieu de sa valeur ("FirstOption" au lieu de "0" ou "1").
De même, le texte suit généralement CamelCasing . Par conséquent, au lieu de "chaîne", XML préfère "chaîne". C'est pourquoi Boolean.TrueString est "True" et Boolean.FalseString est "False" par défaut.
la source
Cela est probablement lié aux anciens jours VB NOT .Net où bool.ToString produisait True ou False.
la source