ToString()的显式vs隐式调用

时间:2013-08-13 21:09:36

标签: c# stringbuilder

当方法调用接受类型对象作为参数时,在字符串构建器上调用ToString()方法有什么好处吗?

StringBuilder sb = new StringBuilder("Hello");

System.Console.WriteLine(sb);

OR

System.Console.WriteLine(sb.ToString());

据我所知,WriteLine将一个对象作为重载,我的猜测是然后在对象上调用ToString()方法,然后调用StringBuilder.ToString()方法并返回预期的字符串值。

再说一次,明确调用ToString()有什么好处吗?你能否证明你答案的合理性?

4 个答案:

答案 0 :(得分:2)

唯一的好处是很清楚你在做什么。如果你可以明确地说明一些事情 - 它使代码更具可读性。

答案 1 :(得分:2)

“我的猜测是在对象上调用ToString()方法”

如果查看MSDN,您会发现没有直接消耗StringBuilder的重载,因此使用了the one which accepts anything(object)

所以你的猜测是正确的,它只会调用ToString

  

如果value为null,则只写入行终止符。否则,   调用 ToString 方法来生成其字符串   表示,并将结果字符串写入标准   输出流。

然后我宁愿自己称呼它,因为它更具可读性,你通过传递StringBuilder就没有任何好处。

答案 2 :(得分:2)

  

显式调用ToString()有什么好处吗?

Console.WriteLine(object)将首先检查对象是否为null,如果是,则只输出一个空行。在null对象上调用ToString将导致NullReferenceException。

因此WriteLine(object)内置了null-safe,null的结果与输出空字符串的非null对象相同。根据上下文,null安全性可能很方便,或者可能导致不良行为。

简而言之,如果希望抑制NullReferenceException,则调用ToString()会更有帮助。

答案 3 :(得分:0)

不,没有任何好处。具有良好静态分析功能的工具(如ReSharper)实际上会让您知道该呼叫是多余的,可以安全删除。