|
10.12.2013, 21:51 | #1 |
Участник
|
Я от системы ожидаю адекватного поведения на мои ошибки.
В приведенной документации (кстати по 2012) закономерно говорится, что в таких случаях будет выдано исключение. На этапе компиляции или рантайм - даже не важно. 2009 просто падает. безответно. Это очень хорошо в тестовом примере. А если эта хрень написана в 900 строках кода с вызовами разных побочных методов и дополнительных циклов, то искать эту ошибку очень весело. Ванька-встанька получается. |
|
|
За это сообщение автора поблагодарили: ax_mct (2). |
11.12.2013, 00:20 | #2 |
Участник
|
У любой системы есть способы ее использования, на которые она рассчитана, и способы, на которые она не рассчитана. Enumerator'ы коллекций не рассчитаны на то, что по ходу работы с ними коллекция будет изменяться. Под отладчиком видно, что изменение коллекции приводит к тому, что enumerator начинает ссылаться на "левый" кусок памяти (в отладчике виден мусор вместо текущего значения). Т.е. изменение коллекции "сбивает" некий указатель, который используется enumerator'ом, и в следующий раз он обращается к области памяти, которая не имеет к коллекции никакого отношения. Я лично подозреваю, что "дураконезащищенность" enumerator'ов была реализована намеренно для повышения производительности их работы. Про эту их особенность просто надо знать - подобно тому, как надо знать про особенности клиент-серверного взаимодействия и то, что некоторые вызовы обрабатываются локально, а некоторые - путешествуют по сети до другого компа и обратно.
Цитата:
|
|
|
За это сообщение автора поблагодарили: mazzy (2), Link (4). |
Теги |
ax2009 |
|
|