私の知る限りConsole.WriteLine()(またはConsole.Write())オブジェクトのToString()メソッドを呼び出して、オブジェクトの文字列表現を取得しますか?つまり、これらの 2 つの呼び出しConsole.WriteLine()は同じですよね?
Foo foo = new Foo();
Console.WriteLine(foo); // This is same as the one bellow
Console.WriteLine(foo.ToString());
そこで、次のような状況を想定してみましょう。Foo の配列のインスタンス化を宣言します。
Foo[] foos = new Foo[10]; // After this line all 10 Foos are `null`s
次に、Foos 自体をインスタンス化せずに、配列の任意の要素で Console.WriteLine() を呼び出します。したがって、この場合、Foos の配列があり、配列内のすべての Foo はnull、Console.WriteLine() の呼び出しによって aNullReferenceExceptionがスローされるはずです。しかし、物事はあなたがこのように呼ぶ場合です
Console.WriteLine(foos[0])
コンソールウィンドウに書かれている以外は何も起こりませんが、Environment.NewLineこのように呼び出すと
Console.WriteLine(foos[0].ToString())
実際には をスローしNullReferenceExceptionます。これら 2 つの呼び出しの違いは何ですか? 最初のものはToString()明示的に呼び出さないことを意味しますが、とにかく Console.WriteLine() によって暗黙的に呼び出されるべきではありませんか? そしてNullReferenceException、最初のケースで がスローされないのはなぜですか?