2

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

非常感谢你的帮助

4

3 回答 3

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");
于 2012-08-08T23:11:13.763 回答
1

您似乎认为从列表中删除恰好与现有项具有相同值的实例SelectListItem将导致现有项被删除。这是错误的。您将不得不保留对现有引用 ( i1) 的引用,或者先找到它并将其删除。后一种方法看起来像(对于一个项目):

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

或者(对于多个):

abcd.RemoveRange(abcd.Where(x => x.Value == "v0"));
于 2012-08-08T23:12:29.840 回答
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
于 2012-08-08T23:12:55.657 回答