gpt4 book ai didi

c# - 关于 NullReferenceException 的困惑

转载 作者:行者123 更新时间:2023-11-30 18:52:34 25 4
gpt4 key购买 nike

据我所知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() 的调用应该会导致正确抛出 NullReferenceException ?但事情是,如果你这样调用它

Console.WriteLine(foos[0])

除了在控制台窗口中写入 Environment.NewLine 之外没有任何反应,但是如果您这样调用它

Console.WriteLine(foos[0].ToString())

它实际上抛出一个 NullReferenceException。这两个电话有什么区别?我的意思是在第一个中我没有显式调用 ToString() 但它不应该被 Console.WriteLine() 隐式调用吗?在第一种情况下如何不抛出 NullReferenceException

最佳答案

So those two calls to Console.WriteLine() are the same right ?

没有。因为 Console.WriteLine 不会 在空引用上调用 ToString - 它只是使用空字符串。它会自行检测。

documentation明确指出:

If value is null, only the line terminator is written. Otherwise, the ToString method of value is called to produce its string representation, and the resulting string is written to the standard output stream.

没有调用 ToString,就没有 NullReferenceException

string.Format 的行为方式相同。例如:

object value = null;
string text = string.Format("Value: '{0}'", value);

text 设置为 Value: ''

关于c# - 关于 NullReferenceException 的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18254454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com