只有微软的人才能真正回答这个问题.但是,我想提供一些有趣的事实;)
首先,这是它在MSDN中关于Boolean.ToString()方法的说法:
回报价值
键入:System.String
TrueString如果此实例的值是true,或者FalseString如果此实例的值是假的.
备注
此方法返回常量"True"或"False".请注意,XML区分大小写,并且XML规范将"true"和"false"识别为有效的布尔值集.如果要将ToString()方法返回的String对象写入XML文件,则应首先调用其String.ToLower方法将其转换为小写.
这就是有趣的事实#1:它根本不会返回TrueString或FalseString.它使用硬编码文字"True"和"False".如果它使用了字段,那对你没有任何好处,因为它们被标记为只读,所以没有改变它们.
替代方法Boolean.ToString(IFormatProvider)甚至更有趣:
备注
provider参数是保留的.它不参与此方法的执行.这意味着与大多数带有provider参数的方法不同,Boolean.ToString(IFormatProvider)方法不反映特定于文化的设置.
解决方案是什么?取决于你究竟想做什么.无论是什么,我打赌它需要一个黑客;)
只有微软的人才能真正回答这个问题.但是,我想提供一些有趣的事实;)
首先,这是它在MSDN中关于Boolean.ToString()方法的说法:
回报价值
键入:System.String
TrueString如果此实例的值是true,或者FalseString如果此实例的值是假的.
备注
此方法返回常量"True"或"False".请注意,XML区分大小写,并且XML规范将"true"和"false"识别为有效的布尔值集.如果要将ToString()方法返回的String对象写入XML文件,则应首先调用其String.ToLower方法将其转换为小写.
这就是有趣的事实#1:它根本不会返回TrueString或FalseString.它使用硬编码文字"True"和"False".如果它使用了字段,那对你没有任何好处,因为它们被标记为只读,所以没有改变它们.
替代方法Boolean.ToString(IFormatProvider)甚至更有趣:
备注
provider参数是保留的.它不参与此方法的执行.这意味着与大多数带有provider参数的方法不同,Boolean.ToString(IFormatProvider)方法不反映特定于文化的设置.
解决方案是什么?取决于你究竟想做什么.无论是什么,我打赌它需要一个黑客;)
...因为.NET环境旨在支持多种语言.
System.Boolean(在mscorlib.dll中)被设计为由语言在内部使用以支持布尔数据类型.C#对其关键字使用全部小写,因此'bool','true'和'false'.
然而,VB.NET使用标准外壳:因此'布尔','真'和'假'.
由于语言必须协同工作,因此无法使用true.ToString()(C#)为True.ToString()(VB.NET)提供不同的结果.CLR设计者为ToString()结果选择了标准的CLR套管符号.
布尔值true的字符串表示形式定义为Boolean.TrueString.
(System.String也有类似的情况:C#将其表示为'字符串'类型).
对于Xml,您可以使用XmlConvert.ToString方法.
这是将其转换为全部小写的简单代码.
然而,将"true"转换回"True"并不是那么简单.
true.ToString().ToLower()
是我用于xml输出的.
它与C#有什么不兼容?Boolean.Parse和Boolean.TryParse不区分大小写,并且通过将值与Boolean.TrueString或Boolean.FalseString("True"和"False")进行比较来完成解析.
编辑:当在反射器中查看Boolean.ToString方法时,结果证明字符串是硬编码的,因此ToString方法如下:
public override string ToString() { if (!this) { return "False"; } return "True"; }
我知道为什么它已经被解决的原因,但是当涉及到"自定义"布尔格式时,我有两种扩展方法,我不能再没有了:-)
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");