код не работает по неизвестной причине (без ошибок) [дубликат]

Вот выполнимое решение, которое я использовал, основываясь на ответе Сэма Я :

dynamic obj = JsonConvert.DeserializeObject(json);
foreach (var response in (IEnumerable)obj.responses)
{
    response.body = JsonConvert.DeserializeObject((string)response.body);
}
string result = JsonConvert.SerializeObject(obj);

1
задан Chandrayya G K 3 January 2014 в 08:02
поделиться

2 ответа

Тот факт, что вы получаете ConcurrentModificationException при использовании расширенного цикла for, означает, что другой поток изменяет ваш список, пока вы перебираете его.

Вы получаете другую ошибку при циклировании с нормальным для цикл по той же причине - список изменяется по размеру, но вы проверяете только ограничение size() в записи в цикле.

Существует множество способов решения этой проблемы, но можно было бы обеспечить все доступ к списку синхронизирован .

7
ответ дан Duncan Jones 28 August 2018 в 21:01
поделиться

Используете ли вы несколько потоков? Принятый ответ в этом вопросе может помочь вам в отношении параметра IndexOutOfBoundsException.

Вызов ConcurrentModificationException возникает, когда вы пытаетесь изменить (изменить, удалить, изменить или изменить каким-либо образом) список, пока итерации по нему. Например:

//This code would throw a ConcurrentModificationException
for(Duck d : liveDucks){
    if(d.isDead()){
        liveDucks.remove(d);
    }
}

//This could be a possible solution
for(Duck d : liveDucks){
    if(d.isDead()){
        deadDucks.add(d);
    }
}

for(Duck d : deadDucks){
    liveDucks.remove(d);  //Note that you are iterating over deadDucks but modifying liveDucks
}
0
ответ дан Community 28 August 2018 в 21:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: