C# 列表在打开前调试时不填充
所有数据都在我们的C#web应用程序中,并以树格式进行结构。我们拥有的每个类都扩展了这个基类BaseObject,它本身有一个名为Children的BaseObject列表。我们定义了:C# 列表在打开前调试时不填充,c#,list,debugging,C#,List,Debugging,所有数据都在我们的C#web应用程序中,并以树格式进行结构。我们拥有的每个类都扩展了这个基类BaseObject,它本身有一个名为Children的BaseObject列表。我们定义了: public List<BaseObject>.Enumerator GetEnumerator() { return Children.GetEnumerator(); } 调试时,在代码的某些部分跳过此foreach循环,因为它表示“this”没有子项。如果我在循环之前放置一个断点,打
public List<BaseObject>.Enumerator GetEnumerator()
{
return Children.GetEnumerator();
}
调试时,在代码的某些部分跳过此foreach循环,因为它表示“this”没有子项。如果我在循环之前放置一个断点,打开“this”并打开它的子循环列表,那么它将进入foreach循环
有人知道为什么会发生这种情况吗?这让我发疯。在遍历列表之前,您需要通过调用枚举上的ToList()来强制将数据拉入内存,正如@Guilherme在评论中提到的那样 这是因为LINQ延迟了SQL执行
查看Charlie Calvert的这篇文章,了解有关LINQ和延迟执行的更多信息:它们是否总是发生这种情况的代码的同一部分?与论坛网站不同,我们不使用“感谢”或“感谢任何帮助”或签名。请参阅“.您是否在某个地方使用Linq?可能是因为Linq操作的延迟行为,当您强制调试器显示结果时,调试器会处理Linq,然后显示正确的值。请尝试在foreach之前放置一个.ToList()。根据@Guilherme的说法,您是否尝试执行.ToList()几乎可以肯定,这就是问题所在。
foreach (var rule in this) {
//do stuff
}