2015-09-25 37 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,,懶得做維護和愚蠢的做代碼評論。有一點要清楚 - 有時候,我就是那些人。不過這次不是。 :) –