如何删除SelectListItem中的项目

时间:2012-08-08 23:03:05

标签: c# c#-4.0

我正在尝试从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方法无济于事。

非常感谢你的帮助

3 个答案:

答案 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