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

cho*_*bo2 5 .net c# asp.net asp.net-mvc

我不得不改变我的代码行.我之前有这样的事情

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

mySTring.add("one");
mySTring.add("two");
Run Code Online (Sandbox Code Playgroud)

但是在我的一个页面上,我有一个不需要字段"two"的下拉列表,所以我所做的只是编写重复的代码而不是

myString.remove("two");
Run Code Online (Sandbox Code Playgroud)

现在我需要将我的列表更改为 List<SelectListItem> myList = new List<SelectListItem>();

所以我现在看起来像这样:

  List<SelectListItem> myList = new List<SelectListItem>()
            { 
                new SelectListItem() { Text = "one", Value = "one"},
                new SelectListItem() { Text = "two", Value = "two"},
            };
Run Code Online (Sandbox Code Playgroud)

那么现在如何删除包含"two"的selectListItem?我知道我可能会使用索引删除.但我可能会在将来添加到列表中,所以如果索引发生变化,我不想开始搜索并更改它.

谢谢

Mar*_*ell 8

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

var item = myList.First(x=>x.Value == "two");
myList.Remove(item);
Run Code Online (Sandbox Code Playgroud)

索引可能更容易......


Mat*_*ton 7

您可以使用RemovalAll方法:

myList.RemoveAll(i => i.Text == "two");
Run Code Online (Sandbox Code Playgroud)

显然,这将删除所有 "Text"属性为"two"的项目,但由于你在ComboBox中使用它,我假设你每个"Text"值只有一个项目.