true.ToString() 
false.toString();

Output:
True
False

是否有一个合理的理由来证明它是“真的”而不是“真的”?当XML的布尔类型是小写时,它就会崩溃,而且也不兼容c#的true/false(不过CLS就不确定了)。

更新

下面是我用c#(用于XML)解决这个问题的一种非常简单的方法。

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

当然,这会向堆栈中多添加1个方法,但会在所有地方删除ToLowers()。


当前回答

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

其他回答

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

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

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

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

Return Value Type: System.String TrueString if the value of this instance is true, or FalseString if the value of this instance is false. Remarks This method returns the constants "True" or "False". Note that XML is case-sensitive, and that the XML specification recognizes "true" and "false" as the valid set of Boolean values. If the String object returned by the ToString() method is to be written to an XML file, its String.ToLower method should be called first to convert it to lowercase.

这里有一个有趣的事实#1:它根本不返回TrueString或FalseString。它使用硬编码的字面量“真”和“假”。如果它使用这些字段也没有任何好处,因为它们被标记为只读,所以不能更改它们。

另一种方法Boolean.ToString(IFormatProvider)甚至更有趣:

讲话 提供者参数是保留的。它不参与该方法的执行。这意味着Boolean.ToString(IFormatProvider)方法与大多数带有提供者参数的方法不同,它不反映特定于区域性的设置。

解决方案是什么?这取决于你到底想做什么。不管它是什么,我打赌它需要一个黑客;)

为什么它不兼容c# ?布尔。解析和布尔。TryParse是不区分大小写的,解析是通过将值与布尔值进行比较来完成的。TrueString或Boolean。“True”和“False”。

编辑:当看布尔。ToString方法,结果是字符串是硬编码的,所以ToString方法如下:

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

...因为. net环境被设计成支持多种语言。

系统。布尔(在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#将其表示为' String '类型)。

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