c# - 引用类型与可空类型 ToString()

标签 c# null nullable value-type reference-type

有人可以解释一下为什么在空引用类型上调用 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>实际上不是空的,它里面的值是空的。

从视觉上它看起来不应该工作,这只是因为您无法看到在后台为您完成了什么。

当您在空引用类型上调用扩展方法时,可以看到其他此类视觉技巧...调用有效(与视觉预期相反),因为在引擎盖下它被解析为静态方法调用,将您的空实例作为参数。

How does a Nullable<T> type work behind the scenes?

关于c# - 引用类型与可空类型 ToString(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11791542/

相关文章:

c# - LINQ (to SQL) 可以进行按位查询吗?

c# - C#编译错误: “The name does not exist in the current context”

c# - 指定的填充模式对此算法无效 - c# - System.Security.Cryptography

字符串中的 Java 空字符

C# 可空数组

c# - Audit.net Audit.MVC 输出到 json 而不是 json 文件

java - hashmap.get(char c) 仅在 linux 中为特殊字符返回 null

c# - 在 C#/.NET 中将参数标记为 NOT nullable?

c# - 这种带有隐式转换运算符的 Nullable<T> 行为的理由是什么

c# - 为什么 C# 在表达式中使用可空值时需要括号?