3

我在某人的代码中发现了以下内容:

catch (Exception exception)
{
    Console.WriteLine(exception.ToString());
}

Resharper 将ToString()呼叫灰显,这一如既往是一个很好的建议。没有它,这个 C# 代码如何工作?会ToString()被隐式调用吗?

4

3 回答 3

7

Console.WriteLine 有一个接受对象的重载。该对象的ToString方法是在内部调用的,因此您无需首先添加ToString

于 2013-04-03T16:18:49.103 回答
5

如果在字符串中使用了异常...例如"something" + exception.ToString()or String.Format("... {0}", exception),那么是的,ToString将被调用,而不必显式调用它。

而且...当您更新示例时,将调用Console.WriteLine()针对任何对象值的ToString调用。这是文档,包含尽可能多的详细信息。

于 2013-04-03T16:16:38.580 回答
3

我假设某事是字符串连接或用作格式化字符串中的参数,那么是的,ToString被隐式调用。

更新以下问题更新

控制台有一个接受object参数的 WriteLine 重载,在此版本中,如果传递的实例不为空,则调用方法 ToString - R# 意识到这一点并建议选择更可取的重载。

于 2013-04-03T16:16:38.657 回答