我们的C#Web应用程序中的所有数据都以树格式构建。我们的每个类都扩展了这个基类BaseObject,它本身有一个名为Children的BaseObject列表。我们定义了:
public List<BaseObject>.Enumerator GetEnumerator()
{
return Children.GetEnumerator();
}
因此,在我们代码的许多地方,我们使用类似的东西搜索树:
foreach (var rule in this) {
//do stuff
}
调试时,代码的某些部分会跳过这个foreach循环,因为它说“this”没有子代。如果我在循环之前放置一个断点并打开“this”并打开它的子列表,那么它才会进入foreach循环。
有没有人有任何理由可能会发生这种情况?这让我疯了。
答案 0 :(得分:0)
在迭代列表之前,您需要通过调用枚举上的ToList()来强制将数据拉入内存,如注释中提到的@Guilherme。
由于LINQ推迟了SQL执行。
查看Charlie Calvert撰写的有关LINQ和延期执行的更多信息:http://blogs.msdn.com/b/charlie/archive/2007/12/09/deferred-execution.aspx