Size: a a a

2019 December 27

IC

Ilya Chernoudov in pro.net
George
Каждому свое, но от таких базовых вещей, как список и foreach я хочу прям точно знать, как оно работает. А оно работает не так как заявлено.

Сомнения остались по этому поводу?
ты это узнал, потому что посмотрел на код и придумал ситуацию, которая никогда не произойдёт в реальности
источник

IC

Ilya Chernoudov in pro.net
так что у меня сомнения
источник

G

George in pro.net
Ilya Chernoudov
ты это узнал, потому что посмотрел на код и придумал ситуацию, которая никогда не произойдёт в реальности
А вот это уже демагогия
источник

B

Bonart in pro.net
George
Кстати проблема что ты меняешь лист внутри итератора решается статическими анализаторами.
При многопоточке?
источник

Dv

Dr. Friedrich von Never in pro.net
Bonart
При многопоточке?
Нет, он имел в виду некоторые частные случаи однопоточного доступа.
источник

Dv

Dr. Friedrich von Never in pro.net
Я, например, не верю, что статический анализатор сумеет поймать кейсы, когда я внутри форыча делаю Application.ProcessMessages(), а меняю коллекцию в обработчике какого-нибудь UI-события.
источник

Dv

Dr. Friedrich von Never in pro.net
Да и в элементарных лямбочках современные стат. анализаторы до сих пор могут запутаться, если им не дать аннотаций. Что уж говорить о более сложных случаях.
источник

Dv

Dr. Friedrich von Never in pro.net
var iter = myList.Select(x => {
 myList.Remove(x);
 return x;
});
foreach (var x in myList) {
 iter.First(); // ну и где твой анализатор теперь?
}
источник

A

Anatoly in pro.net
George
…If modifications made to the list
       // while an enumeration is in progress, the MoveNext and
       // GetObject methods of the enumerator will throw an exception.
а где это в спецификации foreach?
источник

Dv

Dr. Friedrich von Never in pro.net
Anatoly
а где это в спецификации foreach?
Это написано в доке на итератор. А в спецификации на форыч должно быть написано, что он работает с итератором :)
источник

A

Anatoly in pro.net
Dr. Friedrich von Never
Это написано в доке на итератор. А в спецификации на форыч должно быть написано, что он работает с итератором :)
я запутался, можно ссылку?
источник

Dv

Dr. Friedrich von Never in pro.net
Anatoly
я запутался, можно ссылку?
https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1.getenumerator?view=netframework-4.8

> An enumerator remains valid as long as the collection remains unchanged. If changes are made to the collection, such as adding, modifying, or deleting elements, the enumerator is irrecoverably invalidated and the next call to MoveNext or IEnumerator.Reset throws an InvalidOperationException.
источник

A

Anatoly in pro.net
Dr. Friedrich von Never
https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1.getenumerator?view=netframework-4.8

> An enumerator remains valid as long as the collection remains unchanged. If changes are made to the collection, such as adding, modifying, or deleting elements, the enumerator is irrecoverably invalidated and the next call to MoveNext or IEnumerator.Reset throws an InvalidOperationException.
да, ок, т.е. всё работает как обещано, вроде бы
источник

Dv

Dr. Friedrich von Never in pro.net
Имхо, тут решение проблемы-то простое: надо существующее поведение задокументировать
источник

Dv

Dr. Friedrich von Never in pro.net
Anatoly
да, ок, т.е. всё работает как обещано, вроде бы
Там написано, что энумерация в обяз бросит исключение
источник

Dv

Dr. Friedrich von Never in pro.net
А она не в обяз
источник

A

Anatoly in pro.net
Dr. Friedrich von Never
А она не в обяз
что-то я смотрю в исходники и не понимаю когда не кинет
источник

Dv

Dr. Friedrich von Never in pro.net
Anatoly
что-то я смотрю в исходники и не понимаю когда не кинет
Когда поле _version переполнится между итерациями и вернётся к изначальному состоянию
источник

Dv

Dr. Friedrich von Never in pro.net
Да, это прям возмутительно редкая ситуация
источник

Dv

Dr. Friedrich von Never in pro.net
И мне вот щас сложно себе представить, как можно так завязаться на конкретно это поведение, чтобы злоумушленнику была какая-то польза от его нарушения
источник