【问题标题】:Why does the string type have a .ToString() method?为什么字符串类型有一个 .ToString() 方法?
【发布时间】:2010-05-06 06:11:08
【问题描述】:

为什么字符串数据类型有.ToString()方法?

【问题讨论】:

    标签: c# string


    【解决方案1】:

    System.String 类型与 .NET 中的所有类型 almost 一样,派生自 System.ObjectObject 有一个 ToString() 方法,所以 String 继承了这个方法。它是一个虚方法,String 覆盖它以返回对自身的引用,而不是使用返回类型名称的默认实现。

    来自Reflector,这是Object中ToString的实现:

    public virtual string ToString()
    {
        return this.GetType().ToString();
    }
    

    这是String中的覆盖:

    public override string ToString()
    {
        return this;
    }
    

    【讨论】:

      【解决方案2】:

      String 是一个对象,它不是数据类型。因为String是一个对象,所以它从Root Object继承了ToString()方法。

      就像在 Java、Objective-C 或 Scala 中一样:)

      【讨论】:

      • 让我吃惊:),我只是觉得C#就像Java,没有toString方法来处理那些东西:)
      • 它没有大写,因为它是一个别名。编译后,该别名将转换为大写字符串
      • 不,字符串永远不会被装箱成为对象。 stackoverflow.com/questions/215255/string-vs-string-in-c
      【解决方案3】:

      这对于 java 来说也是如此,我认为大多数面向对象的编程语言都有 this ,这是所讨论对象的字符串表示形式,因为默认情况下您创建的每个类都从 Object 扩展,从而导致具有 toString() 方法,请记住它仅适用于不适用于前置类型的对象。

      【讨论】:

        【解决方案4】:

        正如 Mark 所指出的,它只是返回对自身的引用。但是,为什么这很重要?所有基本类型都应返回其自身的字符串表示形式。想象一个像这样工作的日志记录函数:

        public void Log(object o) {
            Console.WriteLine(o.ToString());
        }
        

        这允许您传递任何基本类型并记录其内容。如果没有字符串返回自身,它只会打印出“字符串”而不是它的内容。你也可以用模板函数做同样的事情。

        觉得这很傻?这基本上就是字符串格式化函数的作用。当您执行此操作时,它会调用“ToString”:

        Console.WriteLine("{0}", myString);
        

        【讨论】:

          【解决方案5】:

          如果您的字符串为 NULL 并且您使用 .ToString();,您将获得 Null 引用异常;

          以下将抛出:

          string.Format("msgBoxTitle = {0}", msgBoxTitle.ToString())
          

          最好只写...这不会抛出。

          string.Format("msgBoxTitle = {0}", msgBoxTitle)
          

          【讨论】:

            【解决方案6】:

            C# 中的任何对象都有一个 to string 方法,虽然我想不出为什么在 ToString() 继承自对象类型(当然是字符串)时将字符串转换为字符串的原因就是一个例子。

            【讨论】:

              猜你喜欢
              • 2018-10-30
              • 2015-09-04
              • 2016-12-13
              • 1970-01-01
              • 2011-04-07
              • 2021-08-20
              • 1970-01-01
              • 2016-02-07
              • 1970-01-01
              相关资源
              最近更新 更多