有人可以解释一下为什么在空引用类型上调用 ToString()
会导致异常(在我看来这是完全有道理的,你不能什么都不调用方法!)但是在空的 Nullable(Of T)
上调用 ToString()
返回 String.Empty
?这让我感到非常惊讶,因为我认为这种行为在不同类型之间是一致的。
Nullable<Guid> value = null;
Stock stock = null;
string result = value.ToString(); //Returns empty string
string result1 = stock.ToString(); //Causes a NullReferenceException
最佳答案
Nullable<T>
实际上是一个 struct
有一些编译器支持和实现支持,表现得像 null
实际上没有 null
.
您看到的是实现之间的冲突,允许您自然地将其视为 null
与任何其他引用类型一样,但允许方法调用发生,因为 Nullable<T>
实际上不是空的,它里面的值是空的。
从视觉上它看起来不应该工作,这只是因为您无法看到在后台为您完成了什么。
当您在空引用类型上调用扩展方法时,可以看到其他此类视觉技巧...调用有效(与视觉预期相反),因为在引擎盖下它被解析为静态方法调用,将您的空实例作为参数。
关于c# - 引用类型与可空类型 ToString(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11791542/