我的问题是,当我使用for循环遍历列表并在此期间向其添加元素时,是否会计算循环时添加的元素? 简单的代码示例:
for (int i = 0; i < listOfIds.Count(); i++) // Does loop counts the items added below?
{
foreach (var post in this.Collection)
{
if (post.ResponsePostID == listOfIds.ElementAt(i))
{
listOfIds.Add(post.PostId); // I add new item to list in here
}
}
}
我希望我的解释足以让你理解我的问题。
答案 0 :(得分:8)
是的,通常会这样。但是,在迭代它的同时更改集合可能会导致奇怪的行为和难以发现的错误。根本不推荐。
答案 1 :(得分:0)
如果您希望此循环仅针对预先添加的项目计数运行,请执行此操作
int nLstCount = listOfIds.Count();
for (int i = 0; i < nLstCount ; i++)
{
foreach (var post in this.Collection)
{
if (post.ResponsePostID == listOfIds.ElementAt(i))
{
listOfIds.Add(post.PostId);
}
}
}
答案 2 :(得分:0)
是的肯定会。内部foreach循环将执行并添加外部集合的元素,从而增加元素的数量。
listOfIds.Count = 2 //迭代1
listOfIds.Add(// element)
再来到for循环
listOfIds.Count = 3 //迭代2
答案 3 :(得分:0)
作为for
循环的略微简略解释。您基本上定义了以下内容:
for (initializer; condition; iterator)
body
您的initializer
将确定您的初始条件,并且只会发生一次(有效地在循环之外)。
您的condition
每次都会被评估,以确定您的循环是否应该再次运行,或者只是退出。
您的iterator
定义了循环中每次迭代后将发生的操作。
所以在你的情况下,你的循环每次都会重新评估listOfIds.Count();
,以决定它是否应该执行;这可能是你想要的行为,也可能不是。
正如丹尼斯指出的那样,如果你不小心的话,你可以让自己陷入一些混乱(你的循环可以无限运行)。
可以在msdn:http://msdn.microsoft.com/en-us/library/ch45axte.aspx
上找到更详细/更好的书面解释