2012-08-08 108 views
1

我試圖從selectlistitem中刪除項目。 到目前爲止,我還沒有得到任何成功如何刪除SelectListItem中的項目

這裏使用System.Collections.Generic碼

的快照;

 List<SelectListItem> abcd = new List<SelectListItem>(); 
     SelectListItem i1 = null; 
     i1 = new SelectListItem(); 
     i1.Text = "t0"; 
     i1.Value = "v0"; 
     i1.Selected = false; 
     abcd.Add(i1); 
     i1 = new SelectListItem(); 
     i1.Text = ""; 
     i1.Value = ""; 
     i1.Selected = false; 
     abcd.Add(i1); 
     i1 = new SelectListItem(); 
     i1.Text = "t1"; 
     i1.Value = "v1"; 
     i1.Selected = false; 
     abcd.Add(i1); 

我試圖刪除與匹配的ABCD項目之一:

 SelectListItem f = new SelectListItem(); 
     f.Selected = false; 
     f.Text = "t0"; 
     f.Value = "v0"; 
     f.Selected = false; 

     int x = abcd.IndexOf(f); //return -1 
     bool b = abcd.Remove(f); //return false 

...但它並沒有消除。 我試圖找到索引,它總是返回-1 因爲我不知道某個特定列表的位置,所以removeat方法將無濟於事。

非常感謝您的幫助

回答

5

如果我理解正確,這應該工作。您將需要修改此操作,以處理有多個SelectListItem值與要刪除的值的情況,或者如果沒有SelectListItem具有您的值。

abcd.Remove(abcd.Where(c => c.Value == "v0").Single()); 

或者

abcd = abcd.Where(c => c.Value != "v0").ToList(); 

或者

abcd.RemoveAll(c => c.Value == "v0"); 
+0

當匹配謂詞的列表中有多個項目時,單個將會拋出異常。所以用'First()'代替。 – 2012-08-08 23:18:47

+0

@TimSchmelter正如我在我的回答中指出的那樣。我還提供了不會有這些問題的備選答案。 – xbrady 2012-08-08 23:20:19

0

您似乎認爲,從恰巧有相同的價值觀作爲現有列表中移除一個SelectListItem實例項目將導致現有項目被刪除。這是錯誤的。你將不得不掛在對現有參考(i1)的引用上,或者先找到並刪除它。後一種方法看起來像(一個項目):

abcd.Remove(abcd.Single(x => x.Value == "v0")); 

或(多個):

abcd.RemoveRange(abcd.Where(x => x.Value == "v0")); 
+0

爲什麼你使用'Single'而不是'First'?我認爲可能有多個項目在列表中具有相同的值。 – 2012-08-08 23:15:01

+0

我個人從來沒有這樣做過,但我想你是對的。 – 2012-08-08 23:18:29

0

在引用類型X.Properties = Y.Properties並不意味着X = Y所以:

SelectListItem f = abcd.Find(Itm=>Itm.Text == "t0" && Itm.Value == "v0" && Itm.Selected == false) 

和適應你的條件,你的需求 然後

int x = abcd.IndexOf(f); //return -1 
    bool b = abcd.Remove(f); //return false