c#从列表中删除项目而不知道索引号

我有一个包含我的对象集合的列表:

List list = new List(); 

我的函数收到MyObj作为参数,我想从列表中删除此对象,如下所示: c#从列表中删除项目

  private void remove(MyObj obj) { var itemToRemove = list.Where(x => x.fileName == obj.fileName); if (itemToRemove != null) list.Remove(itemToRemove); } 

收到编译器错误:

无法从’System.Collections.Generic.IEnumerable’转换为’namespace.MyObj’

Where()返回IEnumerable<>

试试这个:

 private void remove(MyObj obj) { var itemToRemove = list.Where(x => x.fileName == obj.fileName); if (itemToRemove.Any()) list.Remove(itemToRemove.First()); } 

更好的是,当你使用List<>

 list.RemoveAll(x => x.fileName == obj.fileName); 

编辑

其他解决方案,从下面的评论中都同样可行。 选择你的毒药,虽然自私(也许显然)我更喜欢RemoveAll方法的可读性和简单性:

Knittl:

 list = list.Where(x => x.filename != obj.filename).ToList(); 

Jeroen van Langen

 var itemToRemove = list.Where(x => x.fileName == obj.fileName).FirstOfDefault(); if (itemToRemove != null) list.Remove(itemToRemove); 

你在WhereFirstOrDefault之间FirstOrDefault

 private void remove(MyObj obj) { var itemToRemove = list.FirstOrDefault(x => x.fileName == obj.fileName); if (itemToRemove != null) list.Remove(itemToRemove); } 

您无需实现此方法,List的remove方法已按预期执行此操作。

http://msdn.microsoft.com/en-us/library/cd666k3e.aspx

 public bool Remove( T item ) 

您应该使用list列出的RemoveAll方法删除所有匹配的元素 –

 private void remove(MyObj obj) { var itemToRemove = list.RemoveAll(x => x.fileName == obj.fileName); }