为什么Boolean.ToString输出“True”而不是“true”

时间:2009-01-29 12:02:08

标签: c# .net boolean

true.ToString() 
false.toString();

Output:
True
False

是否有正当理由认为它是“真实”而非“真实”?在编写XML时它会因为XML的布尔类型是小写而中断,并且与C#的真/假不兼容(虽然不确定CLS)。

更新

这是我用C#(用于XML)来解决它的非常黑客的方式

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

当然,它会向堆栈添加另外一个方法,但在任何地方都会删除ToLowers()。

8 个答案:

答案 0 :(得分:152)

只有来自微软的人才能真正回答这个问题。但是,我想提供一些有趣的事实;)

首先,这就是MSDN中关于 Boolean.ToString()方法的说法:

  

返回值

     

输入:System.String

     

TrueString 如果是这个值   instance为true,或者 FalseString if   此实例的值为false。

     

<强>说明

     

此方法返回   常数“真”或“假”。注意   XML区分大小写,而且是   XML规范认可“真实”   和“假”作为有效集合   布尔值。如果是String对象   由ToString()方法返回   将要写入XML文件   String.ToLower方法应该是   首先调用将其转换为   小写。

有趣的事实是#1:它根本不会返回TrueString或FalseString。它使用硬编码文字“True”和“False”。如果它使用了字段,那对你没有任何好处,因为它们被标记为只读,所以没有改变它们。

替代方法 Boolean.ToString(IFormatProvider)甚至更有趣:

  

<强>说明

     

保留provider参数。它不参与此方法的执行。这意味着与大多数带有provider参数的方法不同,Boolean.ToString(IFormatProvider)方法不反映特定于文化的设置。

解决方案是什么?取决于你究竟想做什么。无论是什么,我打赌它需要一个黑客;)

答案 1 :(得分:102)

...因为.NET环境旨在支持多种语言。

System.Boolean(在mscorlib.dll中)被设计为由语言在内部使用以支持布尔数据类型。 C#对其关键字使用全部小写,因此'bool','true'和'false'。

然而,VB.NET使用标准外壳:因此'Boolean','True'和'False'。

由于语言必须协同工作,因此无法使用true.ToString()(C#)为True.ToString()(VB.NET)提供不同的结果。 CLR设计者为ToString()结果选择了标准CLR套管符号。

布尔值true的字符串表示形式定义为Boolean.TrueString。

(System.String也有类似的情况:C#将其表示为'字符串'类型)。

答案 2 :(得分:43)

对于Xml,您可以使用XmlConvert.ToString方法。

答案 3 :(得分:20)

将它转换为全部小写是一个简单的代码。

然而,将“true”转换回“True”并不是那么简单。

true.ToString().ToLower() 

是我用于xml输出的内容。

答案 4 :(得分:8)

它与C#的兼容性如何? Boolean.Parse和Boolean.TryParse不区分大小写,并且通过将值与Boolean.TrueString或Boolean.FalseString(“True”和“False”)进行比较来完成解析。

编辑:当在反射器中查看Boolean.ToString方法时,结果证明字符串是硬编码的,因此ToString方法如下:

public override string ToString()
{
    if (!this)
    {
        return "False";
    }
    return "True";
}

答案 5 :(得分:5)

我知道它之所以已经被解决的原因,但是当谈到“自定义”布尔格式时,我有两种扩展方法,我不能再没有了:-)

public static class BoolExtensions
{
    public static string ToString(this bool? v, string trueString, string falseString, string nullString="Undefined") {
        return v == null ? nullString : v.Value ? trueString : falseString;
    }
    public static string ToString(this bool v, string trueString, string falseString) {
        return ToString(v, trueString, falseString, null);
    }
}

用法很简单。以下内容将各种bool值转换为其葡萄牙语表示:

string verdadeiro = true.ToString("verdadeiro", "falso");
string falso = false.ToString("verdadeiro", "falso");
bool? v = null;
string nulo = v.ToString("verdadeiro", "falso", "nulo");

答案 6 :(得分:0)

true的原因是&#34; True&#34;是因为微软与XML标准的紧密联系。

来自Wikipedia: &#34;可扩展标记语言(XML)是一种标记语言,它定义了一组规则,用于以人类可读和机器可读的格式对文档进行编码。&#34;

人类可读是主观的,但在XML的眼中,使用&#34; One&#34;代替数字&#34; 1&#34;是优选的。您会注意到这会发生在枚举中,因为单词会被序列化而不是其值(&#34; FirstOption&#34;而不是&#34; 0&#34;或&#34; 1&#34;)。

同样,文字通常在CamelCasing之后。因此,而不是&#34; string&#34;,XML更喜欢&#34; String&#34;。这就是为什么Boolean.TrueString是&#34; True&#34;和Boolean.FalseString是&#34; False&#34;默认情况下。

答案 7 :(得分:-1)

当bool.ToString产生True或False时,这可能与旧的VB NOT .Net时间有关。