gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 04:34:19 26 4
gpt4 key购买 nike

有人可以解释一下为什么在空引用类型上调用 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/

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