2015-09-25 35 views
1

我一直使用合并运算符(又名“真正令人惊讶的运算符,即”??“)来摆脱虚假的空数据(通常从数据库中提取为允许空值,但我知道永远不会处于该值)。看起来像这样。为什么在C#中比较可空和不可空int?

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

不过,我只注意到下面的实际编译。不能看到它是如何有意义的。我不能直观地看到,如果空值将计算表达式为true或false。 ..

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

回答

1

很多人都写在C#(如here) “提升” 操作,其中运营商0当所有操作数都非空时,参数将被视为T上的运算符。而null只等同于它自己。

通常从DB牵强,因为允许空值,但在我的面前永远是在该值

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

因为如此多的数据库不应该存在可空列,所以这种提升是存在的。

+0

很好的回答。 +1。至于你的问题,为什么DB允许* null * - 好吧,因为人们在做准备时很sl,,懒得做维护和愚蠢的做代码评论。有一点要清楚 - 有时候,我就是那些人。不过这次不是。 :) –