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

use*_*934 0 c#

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

List<MyObj> list = new List<MyObj>();
Run Code Online (Sandbox Code Playgroud)

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

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

        if (itemToRemove != null)
            list.Remove(itemToRemove);
    }
Run Code Online (Sandbox Code Playgroud)

收到编译器错误:

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

Moo*_*ice 9

Where() 返回一个 IEnumerable<>

试试这个:

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

    if (itemToRemove.Any())
        list.Remove(itemToRemove.First());
}
Run Code Online (Sandbox Code Playgroud)

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

list.RemoveAll(x => x.fileName == obj.fileName);
Run Code Online (Sandbox Code Playgroud)

编辑

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

Knittl:

list = list.Where(x => x.filename != obj.filename).ToList();
Run Code Online (Sandbox Code Playgroud)

Jeroen van Langen:

var itemToRemove = list.Where(x => x.fileName == obj.fileName).FirstOfDefault(); 
if (itemToRemove != null)
    list.Remove(itemToRemove);
Run Code Online (Sandbox Code Playgroud)