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

问题描述 投票:0回答:7
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()。

c# .net boolean
7个回答
186
投票

只有微软的人才能真正回答这个问题。不过,我想提供一些关于它的有趣事实;)

首先,这是 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) 方法与大多数具有提供程序参数的方法不同,不反映特定于区域性的设置。

解决办法是什么?取决于您到底想做什么。不管它是什么,我打赌它需要黑客;)


113
投票

...因为 .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# 将其表示为“字符串”类型)。


60
投票

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


30
投票

这是将其转换为全部小写的简单代码。

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

true.ToString().ToLower() 

我用它来输出 xml。


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";
}

7
投票

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

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");

-1
投票

这可能源自旧的 VB NOT .Net 时代,当时 bool.ToString 生成 True 或 False。

© www.soinside.com 2019 - 2024. All rights reserved.