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

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();
}

当然,这会向堆栈中添加另外一个方法,但是会在任何地方删除 ToLowers ()。

139328 次浏览

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

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

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

这是一段简单的代码,可以把它全部转换成小写。

然而,将“真”转换为“真”并不是那么简单。

true.ToString().ToLower()

是我用于xml输出的。

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

...因为. 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 '类型)。

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

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

返回值

类型:系统。字符串

TrueString如果这个值 instance为true,或FalseString如果 该实例的值为false。< / p >

讲话

该方法返回 常量“真”或“假”。请注意, XML是区分大小写的,因此 XML规范识别“正确” 和"false"作为有效的集合 布尔值。如果String对象 由ToString()方法返回 被写入一个XML文件,它的 字符串。降低方法应该是 首先调用将其转换为 小写的。< / p >

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

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

讲话

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

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

这可能来自于旧的VB NOT . net时代。ToString产生True或False。

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

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");
    public bool CheckBool(string res)
{
if (res == null)
{
return false;
}


if (res.ToLower() == "true")
{
return true;
}
if (res.ToLower() == "false")
{
return false;
}
if (res == "0")
{
return false;
}
if (res == "1")
{
return true;
}
else
{
return bool.Parse(res);
}
}