![](/img/trans.png)
[英]Getting Collection was modified; enumeration operation may not execute. exception
[英]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,但是拋出異常是正確的,因為您正在修改要迭代的集合:
jArrayFull
被定義為jObjectFull[packageName]
, 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.