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

时间:2013-09-20 17:24:03

标签: c#

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

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 个答案:

答案 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)

您在WhereFirstOrDefault之间混淆了:

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);
}