显式与隐式调用 ToString()
本文关键字:ToString 调用 | 更新日期: 2023-09-27 18:27:28
当方法调用接受类型对象作为参数时,在字符串生成器上调用 ToString(( 方法有什么好处吗?
StringBuilder sb = new StringBuilder("Hello");
System.Console.WriteLine(sb);
或
System.Console.WriteLine(sb.ToString());
据我所知,WriteLine 将一个对象作为重载,我的猜测是 ToString(( 方法随后在该对象上调用,然后调用 StringBuilder.ToString(( 方法并返回预期的字符串值。
那么,显式调用 ToString(( 有什么好处吗?你能证明你的答案吗?
"我的猜测是 ToString(( 方法随后在对象上调用">
如果您查看 MSDN,您会发现没有直接消耗StringBuilder
的重载,因此使用接受任何内容(object
(的重载。
所以你的猜测是正确的,它只会打电话给ToString
.
如果值为 null,则仅写入行终止符。否则, 调用值的 ToString 方法以生成其字符串 表示形式,并将生成的字符串写入标准 输出流。
然后我宁愿自己称呼它,因为它更具可读性,并且通过StringBuilder
没有任何收获。
唯一的好处是很清楚你在做什么。如果你能明确地说明某事,那就去做吧 - 它使代码更具可读性。
显式调用 ToString(( 有什么好处吗?
Console.WriteLine(object( 将首先检查对象是否为空,如果是,只需输出一个空行。在空对象上调用 ToString 将导致 NullReferenceException。
所以 WriteLine(object( 内置了 null-safety,null 的结果将与输出空字符串的非 null 对象相同。 根据上下文,空安全可能很方便,也可能导致不希望的行为。
简而言之,如果您不希望抑制 NullReferenceException,则调用 ToString(( 会更有益。
不,没有任何好处。具有良好静态分析功能的工具(如 ReSharper(实际上会让您知道调用是多余的,可以安全地删除。