集合被修改为例外linq-to-objects

时间:2010-03-08 16:15:33

标签: c# exception linq-to-objects predicate

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

这是我的代码:

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

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

属性是简单的getter(不是auto属性),不会修改任何内容。

当我执行此代码时,我收到InvalidOperationException“集合已被修改;枚举操作可能无法执行”。

任何人都知道为什么?

列表不是genericht .net列表,但属于XPCollection类型(DevExpress的XPO框架)。

2 个答案:

答案 0 :(得分:3)

试试这个:

var eersteDag = pvBillData.Reservering.Dagen[0];
var verwachtAantalKinderen = eersteDag.AantalKinderen;
var verwachtAantalVolwassenen = eersteDag.AantalVolwassenen;

bool lvNoGuests = pvBillData.Reservering.Dagen.All(x =>
{
    return x.AantalKinderen == verwachtAantalKinderen &&
           x.AantalVolwassenen == verwachtAantalVolwassenen
});

答案 1 :(得分:3)

所有是一个简单的吸气剂吗?甚至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);