В c # безопасно ли расширять список, который просматривается с помощью foreach? Если нет, то как насчет других коллекций?
Существует очень мало коллекций, которые позволяют безопасно добавлять их во время итерации. Здесь есть довольно много вариантов. Наиболее распространенным является создание новой коллекции из оригинала или добавление элементов во временную коллекцию во время итерации, а затем добавление их всех в исходную коллекцию в конце.
Единственные коллекции в платформе, которые разработаны с учетом итерации и вставки, - это некоторые из одновременных коллекций. Например, вы можете выполнять итерацию BlockingCollection<T>
через GetConsumingEnumerable и одновременно добавлять в нее элементы. Однако это предназначено для другой цели - обычно используется, когда отдельный поток потребителя и производителя добавляется один, а другой обрабатывает элементы. Таким образом, выполнение этого в собственном цикле было бы очень странным вариантом использования.