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()。
答案 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时间有关。