簡體   English   中英

集合已修改; 枚舉操作可能無法執行。 修改工作項目時

[英]Collection was modified; enumeration operation may not execute. When the jobject is modified

較早的時候工作正常,但是我更新newtonsoft版本后並不確定這開始崩潰。

這是我得到的錯誤:集合已修改; 枚舉操作可能無法執行。

JObject jObjectFull = (JObject)dynObjFullJArray[index]; 
JArray     jArrayFull = (JArray)jObjectFull[packageName]; 
int fullCount = jObjectFull[packageName].Count();

                    if (packageName == "hello") 
                    {
                        if (ishello)
                        {
                            ishellochck= false;
                            jArrayFull.RemoveAll();
                        }

                        jArrayFull.Add(JObject.FromObject(dynObjItem));
                    }
                    else
                    {
                        foreach (var item in jObjectFull[packageName])
                        {
                            int itemId = (int)item.SelectToken(selectedIdOrderNo.Split('|')[0]);
                            if (dynObjItemId == itemId)
                            {
                                //Edit
                                flag = true;
                                jArrayFull[i].Remove();
                                if (i == 0)
                                {
                                    if (fullCount > 1)
                                        jArrayFull[i].AddBeforeSelf(JObject.FromObject(dynObjItem));
                                    else
                                        jArrayFull.Add(JObject.FromObject(dynObjItem));
                                }
                                else
                                {
                                    if (i == (fullCount - 1))
                                    {
                                        --i;
                                        jArrayFull[i].AddAfterSelf(JObject.FromObject(dynObjItem));
                                    }
                                    else
                                        jArrayFull[i].AddBeforeSelf(JObject.FromObject(dynObjItem));
                                }
                            }
                            i++;
                        }`

您沒有說您曾經和正在使用什么版本的Json.NET,但是拋出異常是正確的,因為您正在修改要迭代的集合:

  1. jArrayFull被定義為jObjectFull[packageName]
  2. 因此,當您執行jArrayFull[i].Remove()您實際上正在執行((JArray)jObjectFull[packageName]).RemoveAt(i) ,從而修改了集合。

JArray實現了IList<JToken> ,所以也許您只想這樣做:

        JObject jObjectFull = (JObject)dynObjFullJArray[index];
        JArray jArrayFull = (JArray)jObjectFull[packageName];

        if (packageName == "hello")
        {
            if (ishello)
            {
                ishellochck = false;
                jArrayFull.RemoveAll();
            }

            jArrayFull.Add(JObject.FromObject(dynObjItem));
        }
        else
        {
            for (int i = 0, fullCount = jArrayFull.Count; i < fullCount; i++)
            {
                int itemId = (int)jArrayFull[i].SelectToken(selectedIdOrderNo.Split('|')[0]);
                if (dynObjItemId == itemId)
                {
                    //Edit
                    flag = true;
                    jArrayFull[i] = JObject.FromObject(dynObjItem);
                    // Maybe break here?
                }
            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM