2011-12-12 33 views
-3

我看到很多使用自定義列表的.Any()的示例。我有一個只包含值和沒有鍵的列表。我怎樣才能使用任何()與單維列表。C#.Any()用於檢查單維列表中已有的元素

這裏是我多遠已經得到:

  List<string> thread_pause = null; 
      if (thread_pause.Any(item => item == project_id)&&thread_pause!=null) 
      { 
       show("Already In List!"); 
      } 
      else 
      { 
       show(project_id); 
       session.thread_pause.Insert(0, project_id); 
      } 

我感謝有這方面的幫助。

+0

你Any'的'使用應該工作你'使用系統.Linq'? – Jacob

+0

@Jacob,以及他正在調用任何一個空引用所以... –

+3

您剛剛重寫了'Contains()'。 – SLaks

回答

3

代碼

List<string> thread_pause = null; 
if (thread_pause.Any(...)) 

意味着您可以通過調用null.Any()啓動。它將無法正常工作。

第一行更好的改變

List<string> thread_pause = new List<string>(); 
1

沒有一點做foo.DoStuff() && foo != null,因爲它會在左到右的順序嘗試。你應該有:

if(thread_pause != null && thread_pause.Contains(project_id)) 

沒有必要爲Any,因爲名單已經有找到完全匹配的更有效的方法。

爲了討論的方便,如果你有搜索(比如不區分大小寫的搜索,那麼一個更復雜的事情。

thread_pause != null && thread_pause.Any(item => item.ToUpperInvariant() == project_id.ToUpperInvariant()) 
+0

它真的「更高效」嗎? – Magnus

+0

是的,因爲它直接調用Equals而不是使用lambda執行。這不是一個主要因素,如果它不是更簡潔和更久遠,我不會在大多數時間選擇它。 –

相關問題