【发布时间】:2014-11-10 15:36:17
【问题描述】:
我有这个代码:
public static void myMethodMytype paramObject, IEnumerable<MyType> paramObjects)
{
IEnumerable<Mytype> ieFilteredObjects = paramObjects.Where(x=>x.IDType == paramObject.IDType);
if (ieFilteredObjects.Count() == 2)
{
foreach (MyType iterator in ieFilteredObjects)
{
iterator.MyProperty = null;
}
}
}
本例中ieFilteredObjects有2个元素,但在foreach中,只更新第一个元素,而foreach的退出。
如果我在 foreach 中使用这个:
foreach (MyType iterator in ieFilteredObjects.ToList())
然后它按预期工作。
为什么我必须将 IEnumerable 转换为列表?
谢谢。
【问题讨论】:
-
您明显不正确的代码和正确的代码在功能上应该表现相同(允许您迭代可枚举)。在我看来,失败的原因并没有显示在您提供的代码中。
-
您的查询计数可能会在您的
Count()方法和 foreach 内部的GetEnumerator之间发生变化,因为它每次迭代时都会执行Where子句。paramObjects是否在方法外发生了变异?
标签: c# foreach ienumerable