列表在调试之前不会填充,直到打开

时间:2014-02-04 02:32:01

标签: c# list debugging

我们的C#Web应用程序中的所有数据都以树格式构建。我们的每个类都扩展了这个基类BaseObject,它本身有一个名为Children的BaseObject列表。我们定义了:

public List<BaseObject>.Enumerator GetEnumerator()
{
    return Children.GetEnumerator();
}

因此,在我们代码的许多地方,我们使用类似的东西搜索树:

foreach (var rule in this) {
    //do stuff
}

调试时,代码的某些部分会跳过这个foreach循环,因为它说“this”没有子代。如果我在循环之前放置一个断点并打开“this”并打开它的子​​列表,那么它才会进入foreach循环。

有没有人有任何理由可能会发生这种情况?这让我疯了。

1 个答案:

答案 0 :(得分:0)

在迭代列表之前,您需要通过调用枚举上的ToList()来强制将数据拉入内存,如注释中提到的@Guilherme。

由于LINQ推迟了SQL执行。

查看Charlie Calvert撰写的有关LINQ和延期执行的更多信息:http://blogs.msdn.com/b/charlie/archive/2007/12/09/deferred-execution.aspx