为什么在 C# 中比较可为空和不可为空的 int 有意义?

Why does it make sense in C# to compare nullable and non-nullable int?

我一直使用合并运算符 (a.k.a."really surprised operator, i.e. "??") 来去除虚假的可空值(通常从 DB 获取为允许空值,但我知道永远不会那个值)。看起来是这样的。

int serious = GetSomeReallyNonNullValue();
int? phony = GetNullableButActuallyNonNullValue();
int result = serious + (phony ?? 0);

但是,我刚刚注意到下面的内容实际上是编译过的。看不出这是怎么回事。而且我无法直观地看出 null 值是否会将表达式计算为真或假...

int? test = null;
if (test < 1337) ;

很多关于 C# 中的 "lifting" 操作的文章(例如 here),其中带有 Nullable<T> 参数的运算符被视为 T 上的运算符,当所有操作数是非空的。而null只等价于它自己。

usually fetched from DB as allowing nulls but known to me never to be at that value

在这种情况下,为什么该列未设置为 not null

提升是因为很多数据库在不应该的时候有可以为空的列。