在循环期间是否为循环计数元素添加了自身?

时间:2013-06-25 09:07:58

标签: c# list for-loop

我的问题是,当我使用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
        }
    }
}

我希望我的解释足以让你理解我的问题。

4 个答案:

答案 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

上找到更详细/更好的书面解释