C# for循环是否计算在循环期间添加到自身中的元素?

C# for循环是否计算在循环期间添加到自身中的元素?,c#,list,for-loop,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.Elemen

我的问题是,当我使用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
        }
    }
}
for(int i=0;i

我希望我的解释足以让您理解我的问题所在。

如果您只想为预添加的项目计数运行此循环,请执行此操作

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);
    }
}
}
int-nLstCount=listOfIds.Count();
对于(int i=0;i是的,通常是这样。但在迭代集合的同时更改集合可能会导致奇怪的行为和难以发现的bug。根本不建议这样做。

是的,肯定会。内部foreach循环将执行并将元素添加到外部集合中,从而增加元素的计数

listOfIds.Count=2//迭代1

添加(//元素)

当它再次进入for循环时


listOfIds.Count=3//2次迭代

作为对
循环的
的略微简化的解释。您基本上定义了以下内容:

for (initializer; condition; iterator)
body
您的
初始值设定项
将建立您的初始条件,并且只发生一次(有效地在循环之外)

每次都将对您的
条件
进行评估,以确定您的循环是应该再次运行,还是简单地退出

您的
迭代器
定义循环中每次迭代后将发生的操作

因此,在您的情况下,循环将重新计算
listOfIds.Count()每次,决定是否执行;这可能是你想要的行为,也可能不是

正如丹尼斯指出的,如果你不小心,你可能会让自己陷入一片混乱(youy loop可能会无限运行)


可以在msdn上找到更详细/更好的书面解释:

不,我想循环所有项目,包括我在循环过程中添加的项目。丹尼斯建议不要这样做。这会给你的逻辑带来严重的问题。好的,谢谢。但是,你有什么建议如何以推荐的方式来做吗?基本上我想做的是得到一个树状结构中所有元素的计数。这是我发现的最简单的方法。