爲什麼bool?
支持解除&&
和||
?他們可能已經取消了true
和false
運營商,這些運營商可能間接增加了&&
和||
。爲什麼在`bool?'上沒有解除短路操作?
運營商|
和&
已被解除並執行正確的Three-valued logic。但當然它們不是像||
和&&
那樣短路。
問題是爲什麼他們在創建規範時決定不提升這些操作員。所以「這是這樣的,因爲規格說明是這樣的」對於「爲什麼?」沒有答案。
當擡起true
和false
,使null
既不是true
也不false
:
public static bool operator true(bool? x)
{
return x.HasValue && x.Value
}
public static bool operator false(bool? x)
{
return x.HasValue && !x.Value
}
這將導致&&
和||
行爲就像他們的非短路同行。除了false && anything
和true || anything
會短路(false
和true
在這兩個示例中沒有編譯時間常量)。
這與DBBool example on MSDN非常相似。
我沒有看到通過提升這些操作員而引入的令人驚訝或危險的行爲。我錯過了什麼?
我已閱讀another SO question對此,但發現沒有滿意的答案。
傑夫·耶茨的回答顯示了一個很好的理由,爲什麼提起true
/false
運營商是不是最佳的,它並不能解釋爲什麼直接提升&&
和||
是壞的。由於操作員提升是特殊情況下的編譯器魔術,因此不需要遵循正常類型的超載規則,因此無需提升即可提供&&
/||
true
。
這不會假設NULL意味着錯誤嗎?不是每個人都會同意這一點。在例如關係理論(和SQL)NULL和TRUE,NULL和NULL,FALSE或NULL是NULL,它既不是真也不是假 – nos 2011-03-05 14:29:40
應用於null的運算符'false'返回false。這導致'&&'不會短路並返回null和任何東西。 – CodesInChaos 2011-03-05 14:33:37
http://en.wikipedia.org/wiki/Three-valued_logic – Jan 2011-03-05 14:34:02