我在某人的代码中发现了以下内容:
catch (Exception exception)
{
Console.WriteLine(exception.ToString());
}
Resharper 将ToString()
呼叫灰显,这一如既往是一个很好的建议。没有它,这个 C# 代码如何工作?会ToString()
被隐式调用吗?
Console.WriteLine 有一个接受对象的重载。该对象的ToString
方法是在内部调用的,因此您无需首先添加ToString
。
如果在字符串中使用了异常...例如"something" + exception.ToString()
or String.Format("... {0}", exception)
,那么是的,ToString
将被调用,而不必显式调用它。
而且...当您更新示例时,将调用Console.WriteLine()
针对任何对象值的ToString
调用。这是文档,包含尽可能多的详细信息。
我假设某事是字符串连接或用作格式化字符串中的参数,那么是的,ToString
被隐式调用。
更新以下问题更新
控制台有一个接受object
参数的 WriteLine 重载,在此版本中,如果传递的实例不为空,则调用方法 ToString - R# 意识到这一点并建议选择更可取的重载。