Skip to main content
 首页 » 编程设计

c#之集合被修改异常 linq-to-objects

2024年01月29日33yjmyzz

当我试图找出对象列表中的属性是否对所有对象都相等时,我遇到了一个奇怪的异常。

这是我的代码:

bool lvNoGuests = pvBillData.Reservering.Dagen.All(x => 
{ 
    return x.AantalKinderen == pvBillData.Reservering.Dagen[0].AantalKinderen && 
           x.AantalVolwassenen == pvBillData.Reservering.Dagen[0].AantalVolwassenen 
}); 

想法是使用 .All 查看列表的所有成员是否具有与列表中第一个条目相同的两个属性值。

属性是简单的 getter(不是自动属性)并且不会修改任何内容。

当我执行这段代码时,我得到一个 InvalidOperationException “集合被修改;枚举操作可能无法执行”。

有人知道为什么吗?

列表不是通用的 .net 列表,而是 XPCollection 类型(DevExpress 的 XPO 框架)。

请您参考如下方法:

一切都是简单的 setter/getter 吗?甚至 Dagen?我只能假设一些时髦的事情正在发生(可能是动态类型创建和您在代码中看不到的静默覆盖 - 成员是 virtual 吗?)。但是,要修复它,我会尝试将细节抓取到变量中:

var first = pvBillData.Reservering.Dagen.First(); 
var kinderen = first.AantalKinderen; 
var volwassenen = first.AantalVolwassenen; 
bool lvNoGuests = pvBillData.Reservering.Dagen.All( 
    x => x.AantalKinderen == kinderen && x.AantalVolwassenen == volwassenen);