2013-07-03 20 views
8

boolean structureのMSDN記事を読んでいたところ、ブール値にはTrueStringFalseStringの2つのフィールドがあります。これらはそれぞれ "True"と "False"を返します。なぜbool.TrueStringとbool.FalseStringが存在するのですか?

検索した後、唯一の例はthis dotnetperls articleです。記事は次のように述べています。

プログラムでは、これらの文字列が必要なことがよくあります。 TrueStringとFalseStringは、読み取り専用のメンバーの便利なペアです。それらは文字列形式の真理値を表します。これらは、文字列リテラルを直接使用して間接参照と抽象化を提供します。

これは明らかに、状況によっては便利です。しかし、同じ記事は現実的な例(とにかくIMHO)を提供することができません。

これ以上の読者も私の注目を集めました:TrueStringとFalseStringはpublic static readonly fieldsです。そしてthis dornetperls article状態:

言語仕様では、今後フィールドが変更される可能性がある場合は、public static readonly fieldsを使用することをお勧めします。

これは多分わかります。 .NET開発者が "True"と "False"をそれぞれ "OkeyDokey"と "Negative"に変更しようと決心した場合、TrueStringとFalseStringを使うのは賢明です。

しかし、それでも私には疑問が残っています。どのようなシナリオで文字列をブール値の文字列リテラルと比較したいのですか?見た目には:「プログラムはしばしばそれらを必要とする」。

+3

あなたが独自の構文解析をしているのであれば、(何らかの理由で 'Boolean.Parse'を利用しないと)想像することができます。私はおそらく、「プログラムが必要とする」という声明に反すると主張するだろうが、BCLチームが含めることができるように、それらを使用することは可能であり、それはかなり低い結果である。おそらく 'Boolean.ToString'メソッドは、少なくともその意味で出力するときにブール型文字列の表現を単一/中央で宣言し、開発者はこれを使って' bool'からの文字列出力を比較することができますハードコーディング '' True ''よりも優れています。 –

+3

... .NET環境は多くの言語をサポートするように設計されているためです。 http://stackoverflow.com/a/491367/284240 –

+0

@TimSchmelterなぜ、多言語サポートが、ブール値の文字列リテラルを知りたいのかと関係がある理由を説明できますか?編集:あなたが投稿したリンクの質問は私に良い例を与えた。 – Jordy

答えて

0

簡単な言葉で。 Booleanは構造体です。このブール値は、人間が読めるテキストを表すToString()メソッドを公開します。だから、もしあなたが好きなものを書くなら。

bool b = false; 
b.ToString(); 

出力が「偽」は、ヒトによって読み取り可能とeasyly捕捉されている0の「偽」insteedあろう。

また、テキスト値をブール値に解析する場合もあります。したがって、これらもブール値として表すことができます。例えば。私たちは、これは我々が文字列のツールから値を読み取ることができることを見つけると偽の値がTryparseメソッドによって設定されている

Boolean.TryParse("false" ,out mybool) 

を使用しています。

+0

bool b = falseではありません。 Console.Write(b); 0ではなくFalseを出力しますか? – Jordy

0

プログラムが人間が読み取り可能なファイルまたはデータベースにデータを格納する場合は、値を文字列として格納する必要があります。データを読み込んだときに、アプリケーションによってデータが書き込まれ、標準の文字列表現が使用されていることが分かった場合は、bool.TryParse(x ...)より速くx == bool.TrueStringを比較できます。 x == bool.TrueString || x == bool.FalseString

データが人間または別のシステムによって入力された場合、より多くの値を真として受け入れ、明確な偽と偽のものを区別するので、TryParseがより良い選択肢です。無効入力。 (MSDN Boolean TryParse