2012-12-25 35 views
0

這是代碼:如何檢查列表中是否存在文件?

for (int i = 0; i < lightningsRegions.Count; i++) 
{ 
    if (!pdf1.Lightnings.Contains(lightningsRegions[i])) 
    { 
     pdf1.Lightnings.Add(lightningsRegions[i]); 
     break; 
    } 
} 

兩個列表LightningsRegions和閃電是類型。 我想檢查LightningsRegions是否已經存在於閃電中不再添加它。 但我使用了:pdf1.Lightnings.Add(lightningsRegions [i]);它一直在那裏,並添加我選擇的相同索引。

在我的程序中,我有一個新的窗體,我可以從meny中選擇一個範圍的數字,例如我看到新的窗體上:Lightning 0 Length 32 [41 - 73]我點擊這個,它會去斷點並將其添加到閃電列表中。

因此,現在在索引[0]中的閃電列表中,我有:「閃電0長度32 [41-73]」 現在,如果在同一菜單中,我再次點擊此閃電0長度32 [41-73]它不應該去並添加到閃電列表,但它確實。

在這個新的窗體菜單中,我有很多像這樣的字符串:Lightning 0 Length 32 [41 - 73] 但是我想確保如果我點擊它兩次,它將只添加一次,如果我點擊另一個是不一樣的,它會增加它。

但由於某種原因,現在當我點擊它兩次它得到相同的斷點,並再次添加它。

更新時間:

private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e) 
     { 
      if (listBox1.SelectedItem != null) 
      { 
       item = listBox1.SelectedItem.ToString(); 
       this.f1.PlayLightnings(); 
       f1.pdftoolsmenu(); 
      } 
     } 

這是一種新的形式在這裏我選擇的項目爲ListBox。 所以我想這樣做,如果我通過點擊它或在相同的項目上移動它,它不會將它添加到閃電列表不是一樣的而不是任何其他項目!只有當我移動或點擊一個不在閃電列表中的物品,然後添加它!

+0

現在我再次檢查時,我點擊菜單中的相同的一個,它會添加下一個我的意思是,如果我點擊相同的項目,它會添加下一個,如果我會再次點擊第一個,它會添加下一個指數4 5 6等等...事情是,我想這樣做,如果用戶已經點擊了一個項目,它不會添加任何東西。只有當他點擊閃電列表中不存在的項目時,纔會添加此項目! – user1196715

+0

如果我按照你的描述正確,你顯示的代碼片段是好的。你的問題必須在其他地方。 – Rotem

+1

可能重複的[我如何檢查文件是否已經存在於列表中?](http://stackoverflow.com/questions/14024369/how-can-i-check-if-a-files-already-exist-在列表中) –

回答

1

您可以使用Enumerable.Any

var result = pdf1.Lightnings.Any(c=>lightningsRegions.Contains(c)); 
+0

您的示例是否考慮了我的最新評論? – user1196715

+1

這將是很好,如果你解釋_why_使用linq將解決他的問題。 –

0

當使用包含,平等是用來確定名單確實包含要檢查的實例,但平等並不具備,如果你是比較基準相同的行爲類型而不是值類型。

因此,不是使用Contains,而是嘗試使用Linq擴展方法Any()並在作爲參數給出的委託方法中放置與您相關的字段。


要驗證我說的話確實是正確的調試時,您可以檢查,你會看到,即使該列表中已經包含你要搜索的內容你的代碼仍然將增加一個新的實例,它爲您的一個副本,但作爲實例去,除非他們指向內存中的相同區域,否則它們是不相等的。


所以,如果你是相關的是,lightningRegion.Text例如( 「長度32 [41 - 73]」)不會添加兩次,然後在If子句檢查:

if (!pdf1.Lightnings.Any(lightningRegion => lightningRegion.Text == lightningRegions[i].Text) 
{ 
} 
+0

更新我的問題與代碼,即時通訊從列表框中選擇項目! – user1196715

+0

問題仍然存在,如果列表中有閃電區域,因爲某些屬性必須是唯一的(例如「文本」),請使用我給您的解決方案。 – dutzu