2011-06-22 53 views
2

我有一個wpf c#應用程序,它從文本文件加載任務到treeView,關於任務的數據加載到列表中,我試圖刪除列表中的位置I中的數據,但我無法弄清楚如何。我有這個for循環檢查,看看是否所選的treeView項目是在列表中的位置I的項目,如果是的話,我想從列表中刪除該項目。這是for循環的工作,即時通訊只是想知道如何做實際的刪除,我試過的東西,如.delete.remove我發現msdna。從c列表中刪除#

for (int i = 0; i < name.Count; ++i) 
{ 
     string selectName = ((TreeViewItem)(treeView1.SelectedItem)).Header.ToString(); 

     if (selectName == name[i]) 
     { 

     //name.Remove(i) or name.Remove[i] or name[i].Remove 
     } 
} 
+4

要小心您正在通過循環的東西刪除對象。你將不得不調整索引來補償。 –

回答

5

如果name是List<T>,那麼你可能想name.RemoveAt(i)如果我理解正確的問題。

或者,您可以使用name.RemoveAll(n => n == selectName);而不是for循環。

+0

這就是我需要的,謝謝 – Beef

+1

正如別人指出的那樣,如果你使用循環,你需要小心索引。我建議向後循環: 'for(int i = name.Count-1; i> = 0; i - )' – daveaglick

+0

@Beef:請成爲一個好公民,並將答案標記爲已接受,如果它解決了你的問題。 –

0

您必須給List.Remove()一個對象,而不是索引。

因此,假設名字是一個列表,

name.Remove((TreeViewItem)treeView1.SelectedItem); 
+0

您也可以通過索引刪除。 –

+0

小心刪除一般列表中的對象;仔細檢查equalitycomparer實際上是否支持您的用例。否則,你可能最終會遇到一個在索引#0處默默刪除的經典錯誤(因爲相等比較器總是匹配) – sehe

0

根據您的應用需求,您的數據結構應具有父子關係一段時間。您所要做的就是刪除從父項中選擇的ChildWPF中的TreeView只應自動更新。

爲了便於管理,我建議您閱讀Josh Smith's article on using ViewModels with the TreeView。相信我,它會讓你的生活越早開始使用更強大的數據結構就越容易,只記得TreeView只代表提供的數據,你應該有其他方法直接編輯數據,而不是TreeView

1

如何:

string selectName = ((TreeViewItem)(treeView1.SelectedItem)).Header.ToString(); 
name.RemoveAll(x => x == selectedName);