据我所知Console.WriteLine()
(或Console.Write()
)调用对象的ToString()
方法来获取对象的字符串表示对吗?所以这两个电话Console.WriteLine()
是一样的吗?
Foo foo = new Foo();
Console.WriteLine(foo); // This is same as the one bellow
Console.WriteLine(foo.ToString());
因此,让我们假设以下情况。我声明了一个 Foos 数组的实例化。
Foo[] foos = new Foo[10]; // After this line all 10 Foos are `null`s
然后我在数组的任何元素上调用 Console.WriteLine() 而不实例化 Foos 本身。因此,在这种情况下,我们有一个 Foos 数组,并且数组中的每个 Foo 都是null
这样,所以对 Console.WriteLine() 的调用应该会导致 aNullReferenceException
被抛出,对吗?但问题是,如果你这样称呼它
Console.WriteLine(foos[0])
除了在控制台窗口中写入之外,什么也没有发生,Environment.NewLine
但如果你这样称呼它
Console.WriteLine(foos[0].ToString())
它实际上抛出一个NullReferenceException
. 这两个调用有什么区别?我的意思是在第一个我没有ToString()
显式调用但不应该由 Console.WriteLine() 隐式调用它吗?NullReferenceException
在第一种情况下如何不抛出?