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

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

CJ7 asked 2020-07-06T01:17:57Z
6个解决方案
70 votes

像.NET中几乎所有类型一样,类型2953806487036101101632派生自StringString具有String方法,因此String继承了此方法。 它是一个虚拟方法,并且String重写了它,以返回对自身的引用,而不是使用默认实现(即返回类型的名称)。

从Reflector,这是String中ToString的实现:

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

这是String中的替代:

public override string ToString()
{
    return this;
}
Mark Byers answered 2020-07-06T01:18:20Z
9 votes

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

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

这使您可以传递任何基本类型并记录其内容。 如果没有返回字符串本身,它只会打印出“字符串”而不是其内容。 您还可以使用模板功能执行相同的操作。

觉得这很傻吗? 基本上,这就是字符串格式化功能的作用。 执行此操作时,它将调用“ ToString”:

Console.WriteLine("{0}", myString);
Erik Funkenbusch answered 2020-07-06T01:18:49Z
2 votes

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

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

vodkhang answered 2020-07-06T01:19:14Z
2 votes

甚至对于Java都是如此,我认为大多数面向对象的编程语言都具有this,它是所讨论对象的字符串表示形式,因为默认情况下创建的每个类都会从Object中删除,从而导致具有toString()方法,请记住, 仅适用于不适用于前提类型的对象。

G.E.B answered 2020-07-06T01:19:34Z
1 votes

如果您的字符串为NULL,并且使用.ToString();,则会出现Null引用异常。

将抛出以下内容:

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

最好只写...这不会扔。

string.Format("msgBoxTitle = {0}", msgBoxTitle)
Mark Gerrior answered 2020-07-06T01:20:03Z
0 votes

C#中的任何对象都具有to字符串方法,尽管我想不出为什么从对象类型继承ToString()的那一刻起就将字符串转换为字符串的原因。 的。

Stephen Murby answered 2020-07-06T01:20:23Z
translate from https://stackoverflow.com:/questions/2778827/why-does-the-string-type-have-a-tostring-method