for与foreach,在遍历属性时的差别,for能够更安全的获取数据

某些类的某些属性,由于实现了IQueryable或IEnumerable, 能够更方便、更优美地使用foreach查询。 但是在一些特殊情况下,foreach不一定能够查询到准确的值,例如以下情况:

建造一个HtmlTable (runat=server),至少有一行数据,内容任意,然后再建造一个添加行数据的方法,在每次添加完数据之后,立即使用 foreach(var i in obj.Rows) 查询,这时候就会出现“集合已经更改”的错误。

如果我们换成for(var i = 0; i< obj.Rows.Count;i++),就可以避免错误发生了。 因为for是实时查询,而foreach是调用IQueryable或IEnumerable中的yield return 的后期查询,在实现机制上有所不同。

当然for需要编写更多的代码,在外观上也没有foreach的可读性高,这时候也需要我们根据具体情况具体使用。

你可能感兴趣的:(foreach)