c# - 通用列表 RemoveAll 和 lambda 表达式

标签 c# lambda

我显然在这里遗漏了一些东西......我有一个通用的对象列表,我正在尝试使用 lambda 表达式来删除项目。当我使用下面发布的代码时,出现以下异常。

System.InvalidOperationException: Sequence contains no matching element

public class MyObject {
    public Guid ID1 {get;set;}
    public int ID2 {get;set;}
}

public class MyContainer{
    List<MyObject> myList = new List<MyObject>();

    public MyObject Get(Guid id1) {
        return myList.Single(mo => mo.ID1 == id1);
    }

    public void AddItem(MyObject item) {
        myList.Add(item);
    }

    public int RemoveItems(MyObject item) {
        return myList.RemoveAll(mo => mo.ID1 == item.ID1 || mo.ID2 == item.ID2);
    }
}

我是否在使用 lambda 时犯了错误?

[编辑] 第一个问题失败了。我误读了堆栈跟踪,在我的单元测试中删除了该项目后,我尝试调用 Get() 方法,并且在我的“为什么它已经黑了”的愤怒中,在没有适当分析的情况下发布了一个问题。对不起。

最佳答案

"Sequence contains no matching element" 更像是一个 First(predicate)Single(predicate) 的事情...我不会不要期望从 RemoveAll 中看到这一点。您确定它在发布的代码中吗?

行:

new MyContainer().RemoveItems(new MyObject { ID1 = Guid.Empty, ID2 = 2 });

运行没有任何错误。我想知道您是否正在调用类似的内容:

col.RemoveItems(someQuery.Single(predicate));

碰巧 someQuery 是空的。

关于c# - 通用列表 RemoveAll 和 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1718413/

相关文章:

c# - 如何减少二进制/lambda 表达式?

c++ - 如何从 lambda 表达式中导出参数?

c# - 如何在 Google Buzz 上发帖?

c# - 在 C# 中打开注册表项时出现 Null 值错误

python - 类 lambda 回调 NameError

c++ - C - 指定初始化程序 (xv6)

c# - 在 Unity 中,如果在 IF 条件下找到组件,请立即使用它

c# - Ctrl+F5 在 VS 中的 ASP.NET 项目中如何工作?

c# - 使用 C# 中的 BeginExecuteReader 设计异步数据提供程序

java - map 流到 map