webdevqa.jp.net

ブール値を一般的にはい/いいえ文字列にフォーマットする方法は?

ブール変数に応じて異なる言語で「はい」/「いいえ」を表示したいと思います。
渡されたロケールに従ってフォーマットする一般的な方法はありますか?
ない場合、_boolVar ? Resources.Yes : Resources.No_以外のブール値をフォーマットする標準的な方法は何ですか。
boolVar.ToString(IFormatProvider)が関係していると推測しています。
私の仮定は正しいですか?

43
the_drow

フレームワーク自体はこれを提供していません(私が知る限り)。翻訳true/false into yes/noは、他の潜在的な翻訳(on/offchecked/uncheckedread-only/read-writeまたは何でも)。

振る舞いをカプセル化する最も簡単な方法は、質問で自分自身を提案する構成要素をラップする拡張メソッドを作成することだと思います。

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

使用法:

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

他の回答が示すように、フレームワークではブール値にカスタムフォーマッタを使用できません。ただし、数値にカスタム形式を含めることはできます。ブール値のGetHashCodeメソッドは、trueの場合は1、falseの場合は0を返します。

MSDNカスタム数値書式文字列 によると、「;」の3つのセクションがある場合指定されたフォーマットは「正の数;負の数;ゼロ」に適用されます。

GetHashCodeメソッドをブール値で呼び出して数値を返すことができるため、カスタム数値書式文字列を使用して、Yes/No、On/Off、またはシチュエーションで必要なその他の単語セットを返すことができます。

オン/オフを返すサンプルを次に示します。

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

戻り値:

truth   = on
unTruth = OFF
43
jhamm

残念ながら、 Boolean.ToString(IFormatProvider) はここでは役に立ちません:

providerパラメーターは予約されています。このメソッドの実行には関与しません。つまり、Boolean.ToString(IFormatProvider)メソッドは、providerパラメーターを持つほとんどのメソッドとは異なり、カルチャ固有の設定を反映しません。

いずれの場合でも、ブール値は、YesとNoではなくTrueとFalseを表します。True-> YesとFalse-> Noをマップする場合は、自分で(ローカライズを含む)行う必要があります。そのためのフレームワークには組み込みのサポートはありません。あなたの提案されたソリューション(Resources.Yes/No)は私には問題ありません。

11
Heinzi