2

私の質問は、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

4 に答える 4

8

はい、通常はそうです。ただし、コレクションを繰り返し処理しているときにコレクションを変更すると、奇妙な動作や見つけにくいバグが発生する可能性があります。まったくお勧めしません。

于 2013-06-25T09:11:35.213 に答える
0

このループを preAdded アイテム数に対してのみ実行する場合は、これを行います

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);
    }
}
}
于 2013-06-25T09:11:07.023 に答える
0

はい、きっとそうなるでしょう。内側の foreach ループが実行され、要素が外側のコレクションに追加されるため、要素の数が増加します。

listOfIds.Count=2 //反復 1

listOfIds.Add(//要素)

再びforループになると

listOfIds.Count=3 //反復 2

于 2013-06-25T09:20:20.273 に答える
0

forループの簡単な説明として。あなたは本質的に以下を定義しています:

for (initializer; condition; iterator)
body

あなたのinitializer意志はあなたの初期条件を確立し、一度だけ発生します(事実上、ループの外で)。

ループを再度実行するか、単に終了するかを決定するために毎回condition評価されます。

ループiteratorの各反復後に発生するアクションを定義します。

したがって、あなたの場合、ループはlistOfIds.Count();毎回再評価され、実行するかどうかを決定します。それはあなたの望む行動かもしれませんし、そうでないかもしれません。

Dennis が指摘しているように、注意しないと、ちょっとした混乱に陥る可能性があります (ループが無限に実行される可能性があります)。

msdn: http://msdn.microsoft.com/en-us/library/ch45axte.aspx

于 2013-06-25T09:20:27.757 に答える