显式与隐式调用 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()

"我的猜测是 ToString(( 方法随后在对象上调用">

如果您查看 MSDN,您会发现没有直接消耗StringBuilder的重载,因此使用接受任何内容(object(的重载。

所以你的猜测是正确的,它只会打电话给ToString.

如果值为 null,则仅写入行终止符。否则, 调用值的 ToString 方法以生成其字符串 表示形式,并将生成的字符串写入标准 输出流。

然后我宁愿自己称呼它,因为它更具可读性,并且通过StringBuilder没有任何收获。

唯一的好处是很清楚你在做什么。如果你能明确地说明某事,那就去做吧 - 它使代码更具可读性。

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

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

所以 WriteLine(object( 内置了 null-safety,null 的结果将与输出空字符串的非 null 对象相同。 根据上下文,空安全可能很方便,也可能导致不希望的行为。

简而言之,如果您不希望抑制 NullReferenceException,则调用 ToString(( 会更有益。

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