当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为什么Boolean.ToString输出"True"而不是"true"》经验,为你挑选了6个好方法。

只有微软的人才能真正回答这个问题.但是,我想提供一些有趣的事实;)

首先,这是它在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)方法不反映特定于文化的设置.

解决方案是什么?取决于你究竟想做什么.无论是什么,我打赌它需要一个黑客;)



1> Vojislav Sto..:

只有微软的人才能真正回答这个问题.但是,我想提供一些有趣的事实;)

首先,这是它在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)方法不反映特定于文化的设置.

解决方案是什么?取决于你究竟想做什么.无论是什么,我打赌它需要一个黑客;)


可观察的结果是一样的.实施不是.
如果我错了,请更正我,但对Boolean.ToString()的解释没有发现任何问题。`bool.TrueString`是一个只读字段,其中包含硬编码文字_“ True” _。因此,假设返回字符串“ TrueString”与返回存储在其中的硬编码文字_“ True” _相同,因为返回字符串始终返回值而不是引用。
@FernandoNeira,如果明天将硬编码的文字`TrueString`更改为小写"true",方法`bool.ToString()`仍将返回pascal case"True"文字.

2> stusmith..:

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


我会说C#是"奇怪的"语言..NET中公共的一切都是CamelCase - System.Boolean,True,System.String等 - 它是C#的C遗产,它导致String到字符串,布尔到bool,True到true等等(虽然我个人偏好是还是C#).
他们不得不从事物的外观中容纳VB
另外,很好的理由(对我来说)转换为小写很容易,而很难使它成为CamelCase特别是当使用VB时就像@John Burns所说的那样.否则VB用户不能也永远不会使用`ToString()`并强制使用`if(b,"True","False")`.所以像我这样的c#用户需要牺牲才能使用`ToLower()`:)
@MarkLopez您的评论不正确,请参阅此处:http://msdn.microsoft.com/en-us/library/c8f5xwh7.aspx.此外,查找布尔定义显示它实际上是一个结构,并且两者具有相同的属性.

3> bruno conde..:

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


这似乎是迄今为止最优雅的方法.没有额外的编程,并使用实际为xml输出创建的官方库.

4> John..:

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

然而,将"true"转换回"True"并不是那么简单.

true.ToString().ToLower() 

是我用于xml输出的.


您可以使用System.Globalization.CultureInfo.InvariantCulture.TextInfo.ToTitleCase将"true"转换回"True".

5> Rune Grimsta..:

它与C#有什么不兼容?Boolean.Parse和Boolean.TryParse不区分大小写,并且通过将值与Boolean.TrueString或Boolean.FalseString("True"和"False")进行比较来完成解析.

编辑:当在反射器中查看Boolean.ToString方法时,结果证明字符串是硬编码的,因此ToString方法如下:

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


哇......这可能是C#中唯一的上下文,其中构造"if(!this)"是有效的!
@TamasCzinege`这可能是C#中构造"if(!this)"有效的唯一上下文!"你挑战我,你松了.https://gist.github.com/Steinblock/10df18afb948866be1ba - 今天也是George Boole的第200个生日
那么为什么不回归"假"就是我所要求的

6> Loudenvier..:

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

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

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有