1

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

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”

4

4 回答 4

10

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方法的可读性和简单性:

针织:

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

杰伦·范·朗根

var itemToRemove = list.Where(x => x.fileName == obj.fileName).FirstOfDefault(); 
if (itemToRemove != null)
    list.Remove(itemToRemove);
于 2013-09-20T17:25:33.443 回答
3

你混淆了WhereFirstOrDefault

private void remove(MyObj obj)
{
    var itemToRemove = list.FirstOrDefault(x => x.fileName == obj.fileName);
    if (itemToRemove != null)
        list.Remove(itemToRemove);
}
于 2013-09-20T17:26:18.413 回答
1

不需要你实现这个方法,List的remove方法已经按预期执行了这个操作。

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

public bool Remove(
    T item
)
于 2013-09-20T17:28:00.910 回答
0

您应该使用列表公开的RemoveAll方法来删​​除所有匹配的元素 -

private void remove(MyObj obj)
{
    var itemToRemove = list.RemoveAll(x => x.fileName == obj.fileName);
}
于 2013-09-20T17:36:16.127 回答