Pour autant que je sache Console.WriteLine()
(ou Console.Write()
) appelle la méthode ToString()
de l'objet pour obtenir la représentation de chaîne de l'objet droit? Donc, ces deux appels à Console.WriteLine()
sont les mêmes droits?Confusion à propos de NullReferenceException
Foo foo = new Foo();
Console.WriteLine(foo); // This is same as the one bellow
Console.WriteLine(foo.ToString());
Supposons donc la situation suivante. Je déclare instantiate un tableau de Foos. Ensuite, j'appelle Console.WriteLine() sur n'importe quel élément du tableau sans instancier le Foos lui-même. Donc, dans ce cas, nous avons un tableau de Foos et chaque Foo dans le tableau est null
alors l'appel à Console.WriteLine() devrait provoquer un NullReferenceException
à être lancé correctement? Mais les choses est que si vous l'appelez comme ce
Console.WriteLine(foos[0])
rien ne se passe à l'exception du Environment.NewLine
en cours d'écriture dans la fenêtre de la console, mais si vous l'appelez comme ça
Console.WriteLine(foos[0].ToString())
il jette en fait un NullReferenceException
. Quelle est la différence entre ces deux appels? Je veux dire dans le premier je n'appelle pas explicitement ToString()
mais ne devrait-il pas être appelé implicitement par Console.WriteLine() de toute façon? Et comment le NullReferenceException
n'est pas jeté dans le premier cas?