2013-07-18 16 views
2

所以我有一個命令列表...如果列表爲空,我想跳轉到'else'。返回列表,如果爲空AND計數== 0.跳轉到其他

但是因爲它的一個列表(即使它是空的)還有它的一個實例嗎?對?無論如何,如果沒有訂單仍然進入if語句,所以我嘗試添加.count == 0 ...

,但它仍然進入if語句...我需要做什麼說得清如果在沒有實際記錄訂單去「別的....感謝您的任何答覆

IEnumerable<OrderRecord> orders = _orderService.GetOrdersByCustomer(id, OrderStatus.Completed).ToArray(); 

if (orders != null && orders.Count() == 0) 
{ 
    //order exists 
} 
else 
{ 
    //no order 
} 
+0

爲什麼不'。任何()'? – YD1m

+0

不要檢查null。它保證不是空的 – Kyle

+0

好,謝謝你們。 – John

回答

11

你要檢查是否有列表中的超過0項目

if (orders != null && orders.Count() > 0) 
{ 
    //order exists 
} 
else 
{ 
    //no order 
} 

清單本身不能算作一個項目。

或者,如評論中的Richard Ev建議的那樣,可以使用orders.Any,如果列表中有元素,則返回true。

+3

而不是'orders.Count()> 0',考慮使用'orders.Any()'。 「任何」的好處是不會枚舉整個集合,這可能會對性能產生影響(如果創建訂單的成本很高)。這也可以說是更「有意」的。另外,鍵入的更少! :) –

+0

@RichardEv - 另一方面是簡單地使用'Count' /'Length'屬性,因爲它根本不會調用枚舉器(如果性能很重要)。話雖如此,我認爲「任何」不僅更簡潔,而且對任何人閱讀都有明確的意圖。 – keyboardP

+0

好點,我只是向右滾動並在代碼中發現了'ToArray()'調用! –

3

我假設你要檢查> 0代替

if (orders != null && orders.Count() > 0) 
{ 
    //order exists 
} 

orders.Any()

4

你需要改變你的病情

orders.Count() == 0 

orders.Count() > 0 

因爲目前它檢查列表中是否包含記錄。

您也可以嘗試像Enumerable.Any

if(orders != null && order.Any()) 

why its better to use Any in place of Count()

+1

+1爲鏈接*爲什麼它更好地代替Count()* –

+1

即使爲了可讀性而使用'Any'更好,Enumerable.Count也會檢查輸入序列是否一個集合(如數組或列表),然後使用'Count'屬性,'orders'是一個數組。 –

+0

@TimSchmelter,我同意,沒有看到'ToArray'部分只是集中在'所以我有一個訂單列表:) – Habib

相關問題