首页 文章

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

提问于
浏览
206
true.ToString() 
false.toString();

Output:
True
False

它是否有正当理由"True"而不是"true"?它在写XML时会中断,因为XML的布尔类型是小写的,并且也不是't compatible with C#'的真/假(虽然不确定CLS) .

Update

这是我在C#中解决它的非常hacky方式(用于XML)

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

当然,这会给堆栈增加1个方法,但是除了ToLowers()之外 .

8 回答

  • -1

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

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

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

    首先,这是它在MSDN中关于 Boolean.ToString() 方法的内容:

    返回值类型:System.String如果此实例的值为true,则为TrueString;如果此实例的值为false,则为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)方法不反映特定于文化的设置 .

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

  • 5

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

  • 7

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

  • 17

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

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

    true.ToString().ToLower()
    

    是我用于xml输出的内容 .

  • 42

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

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

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

    之所以 true 是因为微软与XML标准的紧密联系 .

    来自Wikipedia:“可扩展标记语言(XML)是一种标记语言,它定义了一组规则,用于以 human-readable 和机器可读的格式对文档进行编码 . ”

    人类可读是主观的,但在XML的眼中,使用单词“One”代替数字“1”是优选的 . 你会注意到这是使用枚举发生的,因为单词被序列化而不是它的值(“FirstOption”而不是“0”或“1”) .

    同样,文本通常遵循CamelCasing . 因此,XML更喜欢"String"而不是"string" . 这就是为什么Boolean.TrueString是"True"并且Boolean.FalseString默认是"False" .

  • 99

    当bool.ToString产生True或False时,这可能与旧的VB NOT .Net天有关 .

相关问题