【发布时间】:2011-07-04 13:32:58
【问题描述】:
对于比我更了解 .Net 内部运作的人来说,这是一个简单的问题::-)。我只是确保我理解了一些东西。
在我看来,当您在 foreach 中运行 LINQ 时,会评估(运行)LINQ 枚举器,它返回一个集合,然后 foreach 在该集合上继续进行。但是......仍然,我不确定:
foreach (VCCTreeItem ti in (from treeItems in TreeItems select treeItems))
是否在每个循环中重新评估(执行)LINQ 语句?我会认为(并希望)不。但是,当对 foreach 中的集合进行操作时,如果集合被修改,您会在运行时收到错误消息。这让我相信幕后可能正在发生一些可疑的事情。我从来没有时间详细拆解/检查这个,所以这就是我问你这个的原因。我相信你们中的一些人从头顶上知道答案::- D.
哦,我想我可以问同样的问题:
foreach (VCCTreeItem ti in TreeItems)
如果 TreeItems 是一个属性,我在其 get 中执行了一些操作,则该属性将被评估,作为一个值返回,并且 foreach 将对该值进行操作。
【问题讨论】: