wake-up-neo.com

Wie formatiere ich einen Booleschen Wert generisch in einen Ja / Nein-String?

Ich möchte Ja/Nein in verschiedenen Sprachen gemäß einer booleschen Variablen anzeigen.
Gibt es eine generische Methode, um es entsprechend dem übergebenen Gebietsschema zu formatieren?
Wenn dies nicht der Fall ist, was ist neben boolVar ? Resources.Yes : Resources.No Die Standardmethode zum Formatieren eines Booleschen Werts?.
Ich vermute, dass boolVar.ToString(IFormatProvider) beteiligt ist.
Stimmt meine Annahme?

43
the_drow

Das Framework selbst bietet Ihnen dies nicht (soweit ich weiß). Das Übersetzen von true/false In yes/no Erscheint mir nicht häufiger als andere mögliche Übersetzungen (wie on/off, checked/unchecked, read-only/read-write Oder was auch immer) ).

Ich stelle mir vor, dass der einfachste Weg, das Verhalten zu kapseln, darin besteht, eine Erweiterungsmethode zu erstellen, die das Konstrukt umschließt, das Sie in Ihrer Frage selbst vorschlagen:

public static class BooleanExtensions
{
    public static string ToYesNoString(this bool value)
    {
        return value ? Resources.Yes : Resources.No;
    }
}

Verwendung:

bool someValue = GetSomeValue();
Console.WriteLine(someValue.ToYesNoString());
60
Fredrik Mörk

Wie die anderen Antworten zeigen, können boolesche Werte im Framework keine benutzerdefinierten Formatierer haben. Zahlen können jedoch benutzerdefinierte Formate haben. Die GetHashCode-Methode für den Booleschen Wert gibt 1 für true und 0 für false zurück.

Gemäß MSDN Custom Numeric Format Strings , wenn 3 Abschnitte mit ";" Das angegebene Format wird auf "positive Zahlen; negative Zahlen; Null" angewendet.

Die GetHashCode-Methode kann für den bool-Wert aufgerufen werden, um eine Zahl zurückzugeben. Sie können also die benutzerdefinierte numerische Formatzeichenfolge verwenden, um Ja/Nein oder Ein/Aus oder einen anderen Satz von Wörtern zurückzugeben, den die Situation erfordert.

Hier ist ein Beispiel, das ein- und ausgeschaltet wird:

var truth   = string.Format("{0:on;0;OFF}", true.GetHashCode());
var unTruth = string.Format("{0:on;0;OFF}", false.GetHashCode());

kehrt zurück:

truth   = on
unTruth = OFF
43
jhamm

Leider hilft Boolean.ToString (IFormatProvider) hier nicht weiter:

Der Provider Parameter ist reserviert. Es ist nicht an der Ausführung dieser Methode beteiligt. Dies bedeutet, dass die Boolean.ToString-Methode (IFormatProvider) im Gegensatz zu den meisten Methoden mit einem Provider-Parameter keine kulturspezifischen Einstellungen widerspiegelt.

In jedem Fall stehen Boolesche Werte für Wahr und Falsch, nicht für Ja und Nein. Wenn Sie Wahr -> Ja und Falsch -> Nein zuordnen möchten, müssen Sie dies (einschließlich der Lokalisierung) selbst tun. Dafür gibt es keine eingebaute Unterstützung im Framework. Ihre vorgeschlagene Lösung (Resources.Yes/No) sieht für mich gut aus.

11
Heinzi