为什么在 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
?
提升是因为很多数据库在不应该的时候有可以为空的列。
我一直使用合并运算符 (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
?
提升是因为很多数据库在不应该的时候有可以为空的列。