我正在尝试从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方法无济于事。
非常感谢你的帮助
答案 0 :(得分:6)
如果我理解正确,这应该有效。您需要对此进行修改以处理多个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");
答案 1 :(得分:1)
您似乎认为从列表中删除SelectListItem
的新实例恰好具有与现有项目相同的值将导致删除现有项目。这是错的。您将不得不依赖于对现有引用的引用(i1
)或首先找到它并将其删除。后一种方法看起来像(对于一个项目):
abcd.Remove(abcd.Single(x => x.Value == "v0"));
或(多个):
abcd.RemoveRange(abcd.Where(x => x.Value == "v0"));
答案 2 :(得分: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