c# - 比较可空值和空值

标签 c# nullable

基本上,Nullable<T>是一个结构,它解释了调用 .HasValue 之类的事情永远不会抛出 NullReferenceException .我想知道为什么 - 给定一个没有值的可空 - 与 null 进行比较总是true , 即使使用 Object.ReferenceEquals ,我认为它会返回 false,因为它是一个结构。

CLR 中是否内置了特殊行为来实现这一点?它可能还会解释为什么通用结构约束不允许为 nullable。

最好的问候,
奥利弗·哈纳皮

最佳答案

如果你这样做:

int? x = null;
if (x == null)

将使用 HasValue

使用 Object.ReferenceEquals 将首先装箱值 - 并将空值转换为空引用(这确实是特殊的 CLR 行为)。装箱可为空的值类型时,结果要么是空引用,要么是基础 值类型的装箱。换句话说,不存在可空值类型的装箱值这样的东西。

关于c# - 比较可空值和空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3561243/

相关文章:

java - 所有子包的 IntelliJ IDEA @ParametersAreNonnullByDefault

c# - 如何在 ASP.NET Core 的 HTTP GET 请求中使用 ValidateAntiForgeryToken?

android - 带有 NULLABLE 外键的 SQLite

javascript - jQuery DataTable PDF 导出表格单元格没有边框

c# - 控制级别 ValidateRequestMode 没有效果

c# - .Net 中条件运算符的奇怪行为

SQL Server ALTER 字段 NOT NULL 需要永远

c# - 如何在方法中提供可为空的参数?

c# - 可空类型和赋值运算符

c# - 如何在 Visual Studio Performance Analyzer 中查看毫秒而不是样本百分比