我在某人的代码中发现了以下内容:
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# 意识到这一点并建议选择更可取的重载。