Я, например, не верю, что статический анализатор сумеет поймать кейсы, когда я внутри форыча делаю Application.ProcessMessages(), а меняю коллекцию в обработчике какого-нибудь UI-события.
Мне нравится, как эта проблема в Go решается. Там тупо спан над массивом. Менять нельзя, добавление в список это копия спана плюс присвоение нового спана переменной. Удаление это слайс спана.