1. ホーム
  2. c#

[解決済み】Boolean.ToStringが "True "と出力し、"true "と出力しない理由

2022-04-01 22:31:12

質問

true.ToString() 
false.toString();

Output:
True
False

それが "True" であって "true" でないのは、何か正当な理由があるのでしょうか?XMLのboolean型としてXMLを書くと壊れます。 は小文字 また、C#のtrue/falseとも互換性がありません(CLSは分かりませんが)。

更新

以下は、C#でこの問題を回避するための、私の非常に雑な方法です(XMLを使用する場合)。

internal static string ToXmlString(this bool b)
{
    return b.ToString().ToLower();
}

もちろん、スタックに1つメソッドが追加されますが、ToLowers()はどこでも削除されます。

解決方法は?

その質問に本当に答えられるのは、マイクロソフトの人間だけです。しかし、私はそれについていくつかの楽しい事実を提供したいと思います;)

まず、MSDNにはこのように書かれています。 Boolean.ToString() メソッドを使用します。

戻り値

タイプ System.String

真の文字列 この インスタンスが真である場合、または FalseString もし このインスタンスの値がfalseである場合。

備考

このメソッドは 定数 "True" または "False" です。ただし XMLは大文字と小文字を区別します。 XMLの仕様では、"true"を認識します。 と"false"を有効なセットとして認識します。 ブール値。もし、Stringオブジェクトが ToString() メソッドが返す がXMLファイルに書き込まれる場合、その String.ToLowerメソッドを使用する必要があります。 に変換するために最初に呼び出されます。 小文字

ここで面白い事実その1があります。それは、TrueStringやFalseStringを全く返さないことです。これはハードコードされたリテラル "True" と "False" を使用しています。フィールドを使用しても、読み取り専用とマークされているので、変更することはできません。

別の方法です。 Boolean.ToString(IFormatProvider) はもっと面白い。

備考

provider パラメータは予約されています。それはこのメソッドの実行に関与しません。つまり、Boolean.ToString(IFormatProvider) メソッドは、プロバイダパラメータを持つほとんどのメソッドとは異なり、文化固有の設定を反映しないことを意味します。

解決策は?あなたが具体的に何をしようとしているかによります。それが何であれ、ハックが必要なのは間違いないでしょう ;)