true.ToString()
false.toString();
Output:
True
False
是否存在“真实”而非“真实”的合理理由?当将 XML 编写为 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
TrueString 如果 this 的值 实例为 true,或 FalseString 如果 该实例的值为 false。
备注
该方法返回 常量“True”或“False”。注意 XML 区分大小写,并且 XML 规范承认“真实” 和“假”作为有效的集合 布尔值。如果字符串对象 由 ToString() 方法返回 被写入 XML 文件,其 String.ToLower 方法应该是 首先调用将其转换为 小写。
有趣的事实#1:它根本不返回 TrueString 或 FalseString。它使用硬编码文字“True”和“False”。如果它使用这些字段对您没有任何好处,因为它们被标记为只读,所以无法更改它们。
替代方法,Boolean.ToString(IFormatProvider)甚至更有趣:
备注
provider参数被保留。它不参与该方法的执行。这意味着 Boolean.ToString(IFormatProvider) 方法与大多数具有提供程序参数的方法不同,不反映特定于区域性的设置。
解决办法是什么?取决于您到底想做什么。不管它是什么,我打赌它需要黑客;)
...因为 .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# 将其表示为“字符串”类型)。
对于 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);
}
}
使用很简单。以下将各种布尔值转换为其葡萄牙语表示形式:
string verdadeiro = true.ToString("verdadeiro", "falso");
string falso = false.ToString("verdadeiro", "falso");
bool? v = null;
string nulo = v.ToString("verdadeiro", "falso", "nulo");
这可能源自旧的 VB NOT .Net 时代,当时 bool.ToString 生成 True 或 False。