true.ToString()
false.toString();
Output:
True
False
Gibt es einen gültigen Grund dafür, dass es "wahr" und nicht "wahr" ist? Es bricht beim Schreiben von XML ab, da der boolesche Typ von XML in Kleinbuchstaben geschrieben wird und auch nicht mit C #s true / false kompatibel ist (bei CLS jedoch nicht sicher).
Aktualisieren
Hier ist meine sehr hackige Art, es in C # zu umgehen (zur Verwendung mit XML)
internal static string ToXmlString(this bool b)
{
return b.ToString().ToLower();
}
Das fügt dem Stapel natürlich eine weitere Methode hinzu, entfernt jedoch überall ToLowers ().
return b.ToString().ToLower();
mitreturn b ? "true" : "false";
. Sauberer, effizienter, weniger abhängig von einer Methode, die theoretisch vom Gebietsschema abhängen könnte (obwohl dies in aktuellen Implementierungen nicht der Fall ist).Antworten:
Nur Leute von Microsoft können diese Frage wirklich beantworten. Ich möchte jedoch einige lustige Fakten dazu anbieten;)
Zunächst wird in MSDN Folgendes über die Boolean.ToString () -Methode gesagt :
Hier kommt die lustige Tatsache Nr. 1: Sie gibt TrueString oder FalseString überhaupt nicht zurück. Es werden fest codierte Literale "True" und "False" verwendet. Würde Ihnen nichts nützen, wenn die Felder verwendet würden, da sie als schreibgeschützt markiert sind und daher nicht geändert werden.
Die alternative Methode Boolean.ToString (IFormatProvider) ist noch lustiger:
Was ist die Lösung? Kommt darauf an, was genau du versuchst zu tun. Was auch immer es ist, ich wette, es wird einen Hack erfordern;)
quelle
Boolean.ToString()
.bool.TrueString
ist ein schreibgeschütztes Feld, das das fest codierte Literal "True" enthält . Die Angabe, dass die Rückgabe erfolgt, entspricht der Angabe, dass das darin gespeicherte festTrueString
codierte Literal "True" zurückgegeben wird, da die Rückgabe einer Zeichenfolge immer den Wert und keine Referenz zurückgibt.TrueString
beispielsweise in "true" in Kleinbuchstaben geändert wird, gibt die Methodebool.ToString()
immer noch das Literal "True" in Pascal zurück.... weil die .NET-Umgebung viele Sprachen unterstützt.
System.Boolean (in mscorlib.dll) wurde entwickelt, um intern von Sprachen verwendet zu werden, um einen booleschen Datentyp zu unterstützen. C # verwendet für seine Schlüsselwörter alle Kleinbuchstaben, daher 'bool', 'true' und 'false'.
VB.NET verwendet jedoch ein Standardgehäuse: daher 'Boolean', 'True' und 'False'.
Da die Sprachen zusammenarbeiten müssen, kann true.ToString () (C #) nicht vorhanden sein, wodurch True.ToString () (VB.NET) ein anderes Ergebnis erhält. Die CLR-Designer haben die Standard-CLR-Gehäusenotation für das ToString () - Ergebnis ausgewählt.
Die Zeichenfolgendarstellung des booleschen Wertes true ist als Boolean.TrueString definiert.
(Es gibt einen ähnlichen Fall bei System.String: C # präsentiert ihn als 'String'-Typ).
quelle
ToString()
und er muss es gerne verwendenIf(b, "True", "False")
. Also c # Benutzer wie ich müssen opfern, um zu verwendenToLower()
:)Für Xml können Sie die XmlConvert.ToString- Methode verwenden.
quelle
Es ist ein einfacher Code, um dies in Kleinbuchstaben umzuwandeln.
Es ist jedoch nicht so einfach, "true" wieder in "True" umzuwandeln.
ist das, was ich für die XML-Ausgabe verwende.
quelle
ToString()
Ergebnisses bevorzugt .ToLowerInvariant()
.Wie ist es nicht mit C # kompatibel? Bei Boolean.Parse und Boolean.TryParse wird die Groß- und Kleinschreibung nicht berücksichtigt. Bei der Analyse wird der Wert mit Boolean.TrueString oder Boolean.FalseString verglichen, die "True" und "False" sind.
BEARBEITEN: Wenn Sie sich die Boolean.ToString-Methode im Reflektor ansehen, stellt sich heraus, dass die Zeichenfolgen fest codiert sind, sodass die ToString-Methode wie folgt lautet:
quelle
That's probably the only context in C# where the construct "if (!this)" is valid!
Du hast mich herausgefordert, du verlierst . gist.github.com/Steinblock/10df18afb948866be1ba - Auch heute ist der 200. Geburtstag von George Boolereturn this ? "True" : "False";
? (Ein weiterer ungewöhnlicher Fall, wie Sie nicht oftthis
als?:
Bedingung sehen, aber hier würde es Sinn machen.)Ich kenne den Grund, warum es so ist, wie es bereits angesprochen wurde, aber wenn es um "benutzerdefinierte" boolesche Formatierung geht, habe ich zwei Erweiterungsmethoden, ohne die ich nicht mehr leben kann :-)
Die Verwendung ist trivial. Im Folgenden werden verschiedene Bool-Werte in ihre portugiesischen Darstellungen konvertiert:
quelle
Der Grund
true
für "True" liegt in der starken Bindung von Microsoft an XML-Standards.Aus Wikipedia : "XML (Extensible Markup Language) ist eine Auszeichnungssprache, die eine Reihe von Regeln für die Codierung von Dokumenten in einem Format definiert, das sowohl für Menschen als auch für Maschinen lesbar ist."
Vom Menschen lesbar ist subjektiv, aber in den Augen von XML wird die Verwendung des Wortes "Eins" anstelle einer Zahl "1" bevorzugt. Sie werden feststellen, dass dies mithilfe von Aufzählungen geschieht, da das Wort anstelle seines Werts serialisiert wird ("FirstOption" anstelle von "0" oder "1").
Ebenso folgt der Text üblicherweise CamelCasing . Daher bevorzugt XML anstelle von "Zeichenfolge" "Zeichenfolge". Aus diesem Grund ist Boolean.TrueString "True" und Boolean.FalseString standardmäßig "False".
quelle
Dies geht wahrscheinlich auf die alten VB NOT .Net-Tage zurück, als bool.ToString True oder False produzierte.
quelle