我显然在这里遗漏了一些东西......我有一个通用的对象列表,我正在尝试使用 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/