我有一个包含我的对象集合的列表:
List<MyObj> list = new List<MyObj>();
我的函数收到MyObj作为参数,我想从列表中删除此对象,如下所示:c# remove item from list
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'
答案 0 :(得分:9)
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);
答案 1 :(得分:3)
您在Where
和FirstOrDefault
之间混淆了:
private void remove(MyObj obj)
{
var itemToRemove = list.FirstOrDefault(x => x.fileName == obj.fileName);
if (itemToRemove != null)
list.Remove(itemToRemove);
}
答案 2 :(得分:1)
您无需实现此方法,List的remove方法已按预期执行此操作。
http://msdn.microsoft.com/en-us/library/cd666k3e.aspx
public bool Remove(
T item
)
答案 3 :(得分:0)
您应该使用列表公开的RemoveAll方法删除所有匹配的元素 -
private void remove(MyObj obj)
{
var itemToRemove = list.RemoveAll(x => x.fileName == obj.fileName);
}