当方法调用接受类型对象作为参数时,在字符串构建器上调用ToString()方法有什么好处吗?
StringBuilder sb = new StringBuilder("Hello");
System.Console.WriteLine(sb);
OR
System.Console.WriteLine(sb.ToString());
据我所知,WriteLine将一个对象作为重载,我的猜测是然后在对象上调用ToString()方法,然后调用StringBuilder.ToString()方法并返回预期的字符串值。
再说一次,明确调用ToString()有什么好处吗?你能否证明你答案的合理性?
答案 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)实际上会让您知道该呼叫是多余的,可以安全删除。