如何从列表集合中删除一个对象?

5

我不得不修改我的代码行。之前我的代码是这样的:

// this is in a static method.
List<string> mySTring = new List<string>();

mySTring.add("one");
mySTring.add("two");

但是在我的某个页面上,我有一个下拉列表框,它不需要填写“two”字段,所以我没有编写重复的代码,只做了以下操作:

myString.remove("two");

现在我需要将我的列表更改为一个List<SelectListItem> myList = new List<SelectListItem>(); 现在它的样子是这样的:
  List<SelectListItem> myList = new List<SelectListItem>()
            { 
                new SelectListItem() { Text = "one", Value = "one"},
                new SelectListItem() { Text = "two", Value = "two"},
            };

现在,我应该如何删除包含“two”的selectListItem?我知道我可能可以使用按索引删除。但如果索引更改,我以后可能会添加到列表中,所以我不想开始搜索并更改它。

谢谢

3个回答

8

List<T> 默认情况下将比较对象引用(除非 SelectListItem 实现了自定义的相等性方法)。因此,除非您仍然拥有对第二个项目的引用,否则您将不得不通过引用或查找所需的项目来获取它:

var item = myList.First(x=>x.Value == "two");
myList.Remove(item);

Index may be easier...


嗯,希望不必再搜索它。我将不再拥有参考了,我想我会通过索引或查找进行删除。不确定该使用哪种方法。只是担心将来添加了我的列表集合中的某些内容,突然它成为了不同的索引,并且我正在尝试弄清原因,为什么它不起作用。 - chobo2
1
另外,List集合的排序方法在这种情况下会如何工作?因为我正在对我的字符串列表使用排序方法(这就是我担心索引会改变的原因)。 - chobo2
你可以使用不需要暴力搜索的不同容器。 - spender
List<T>的排序依赖于标准排序方式,这取决于SelectListItem是否实现了IComparableIComparable<SelectListItem>接口。 - Marc Gravell
首先展示的方法是LINQ,应该在你使用MVC时可用。尝试将 "using System.Linq;" 添加到文件的顶部。由于单词没有内置方法可以使用,因此排序有些棘手。 - Marc Gravell
显示剩余2条评论

7

You could use the RemovalAll method:

myList.RemoveAll(i => i.Text == "two");

显然,这将删除所有“Text”属性为“two”的项目,但由于您在使用ComboBox,我假设您只有一个每个“Text”值的项目。


0

我们可以通过添加以下代码,在 jQuery 自动完成函数中使鼠标选择自动完成 div。

这里我使用的 id 名称是 Requiredid。

 $("#Requiredid").autocomplete({focus:function(e,ui) {
      document.getElementById('Requiredid').value = ui.item.label;
      document.getElementById('hdnValue').value = ui.item.id;//If You need this value you //can add this line
}});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接