2015-02-05 39 views
-1
public List<Product> SetProducts { get; set; } 
public string ParentSetId { get; set; } 

第一種情況:if語句,&&運營商邏輯(什麼是編碼這種伎倆的重要性?)

if (SetProducts.Any(p => p.blabla== Enum.blabla) && string.IsNullOrEmpty(ParentSetId)) 

第二種情況:

if (string.IsNullOrEmpty(ParentSetId) && SetProducts.Any(p => p.blabla== Enum.blabla)) 

& &運營工作由左到正確,所以如果陳述在每種情況下都會有不同的表現。 我們知道如果語句將在左邊條件之前被檢查,那麼如果結果「真實」看起來正確的語句。

第二種情況更有用。

他們的優點是什麼?

編碼這種技巧的重要性是什麼?

感謝

+0

你有沒有聽說過懶惰的評價? – 2015-02-05 14:02:04

+2

實際上有什麼問題? – ken2k 2015-02-05 14:02:51

+0

這是個問題; 他們有什麼優勢? 這種技巧編碼的重要性是什麼? – 2015-02-05 14:20:52

回答

2

&&會做短路評價,所以如果第一個條件是假的,也沒有必要檢查第二個條件。

考慮到,你的第二個代碼片段似乎因爲對相比,通過項目列表會使用Enumerable.Any檢查string.IsNullOrEmpty(ParentSetId)可能便宜比較好。

4

這個技巧很重要,即當一個條件不應該被檢查,如果另一個不滿意。

例如:

if (node != null && node.data != key) { 
    ... 
} 

如果我們交換這兩個條件(即node.data != key被首先檢查),那麼我們就可能提領空指針。然而,正如我們所寫的,我們確保node而不是在嘗試解引用它之前是空指針。

2

你所說的是稱爲短路布爾評估。

他們經常被用來作爲後衛,在

if (someObject != null && someOperationInvolvingSomeObject)

從而防止異常在someObject是空的情況。

它們有時也可以用來重新排列邏輯以獲得更好的性能,例如,從

if (slowMethod() || fastMethod())

if (fastMethod() || slowMethod())