如何从 List<string> 中删除一个项目

11

如何:从列表中删除一个项目

我有以下代码片段...

companies.Remove(listView_Test.SelectedItem.ToString());

有一个名为listView的列表视图,其中包含三个没有名称,只有"A"、"B"和"C"内容的项目。现在当我选择这个listView中的一个项目后,我再点击一个按钮,运行我的方法,其中包含Remove()/RemoveAt()。现在我想删除List<string> myList中与所选项目的Content相同的行。

编辑: 解决方案来自Flow Flow OverFlow

int index = companies.IndexOf(companyContent);
companies.RemoveAt(index);

1
调用.RemoveAt方法,然后将要删除的项的索引作为参数传递。 - Transcendent
你能展示一下你想要删除的例子吗? - Matthijs
你需要使用Remove函数并传入一个谓词。类似于x => x.Text == listView_Test.SElectedItem.ToString()。请注意,这段代码可能不起作用(这就是为什么我没有将其作为答案的原因),它只应该引导您朝正确的方向前进。我现在没有时间发布完整的答案,抱歉。 - user3596113
4个回答

20
你需要获取要从列表中删除的对象的索引,然后你可以:
//Assuming companies is a list 
companies.RemoveAt(i);

要获取项目的索引,您可以使用以下方法:
companies.IndexOf("Item");

或者使用带有条件语句的for循环:
for (int i = 0; i < companies.Count; i++) {
   // if it is List<String>
   if (companies[i].Equals("Something")) {
         companies.RemoveAt(i);   
   }
}

“对象的索引”是什么意思?如果你指的是它的位置,我不知道。它在 List<string> 中的某个位置,我只知道它的“名称”。就像“delete * from myList where Content = 'Hello World'”。 - sjantke
谢谢,这正是我想做的。 - sjantke
1
如果在迭代过程中删除一个项,列表的大小/计数会发生变化,而i < companies.Count条件无法保证检查完整的列表。请尝试使用包含两个可删除项的列表:{"Something","Something"} - Tobia
@Tobia,那么逆向遍历列表会更好吗?比如使用 for (int i=(companies.Count-1); i>=0; i--) 的方式? - Amos Egel
是的,它可以成为一个解决方案。 - Tobia

8
您可以通过已知的位置或项目中的内容来删除项目。
public static void Main()
{
    List<Object> items = new List<Object>();
    items.Add("test1");
    items.Add("test2");
    items.Add("test3");

foreach(var a in items)
    Console.WriteLine(a.ToString());
Console.WriteLine("--");

items.RemoveAt(1); // remove object at position 1, in this case "test2"

foreach(var a in items)
    Console.WriteLine(a.ToString());
Console.WriteLine("--");

items.RemoveAll(x => ((string) x) == "test1"); // LAMBDA query to remove by a condition

foreach(var a in items)
    Console.WriteLine(a.ToString());
}

输出

test1
test2
test3
--
test1
test3
--
test3

我认为你也必须涵盖RemoveRange。 - Dhaval Patel

1
public int FindItem(List<string> haystack, string needle)
{ for (int i = 0; i < haystack.Count; i++) 
      if (haystack[i] == needle) return i;
  return -1;
}


try {
     companies.Remove(FindItem(companies, listView_Test.SelectedItem.ToString() ) );
    } catch {  /* not found, no problem.. */ } 

0

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