Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2019, 11:51   #1
Glen
Форумчанин
 
Аватар для Glen
 
Регистрация: 09.02.2011
Сообщений: 150
По умолчанию “Collection was modified; enumeration operation might not execute” из System.Data.TypedTableBase<>

У меня есть .NET 4.0 assembly; она зарегистрирована GAC и работает как часть BizTalk “orchestration”.
Иногда в ней возникает такая ошибка - “Collection was modified; enumeration operation might not execute. : System.InvalidOperationException: Collection was modified; enumeration operation might not execute.”. I cannot reproduce it; when I run the same processing of the same data, my assembly does not generate the error in this place.

Ошибка происходит при вызове ‘.Where(<condition>).ToArray()’ для объекта datatable – класс System.Data.TypedTableBase<MyDataRo wClass>.

..................
Код:
int? setTypeGroupId;
...

return instances.WorkContributors.Where
	(
		c =>
			!c.IsInterestedPartyNoNull()
			&& c.InterestedPartyNo == publisherIpNo
			&& c.SetTypeNo == 1
			&& (c.RecordType == "SPU")
            && c.TypeCode == "E" 
            && (!setTypeGroupId.HasValue ||  
                (setTypeGroupId.HasValue && c.SetTypeGroupID == setTypeGroupId))
	)
	.ToArray();
..................

Объект ‘instances’ это dataset – мой класс производный от System.Data.DataSet.
Property ‘instances.WorkContributors’ это объект datatable – класс System.Data.TypedTableBase<MyDataRo wClass>.
Класс MyDataRowClass - производный от System.Data.DataRow.

Сall stack после ошибки:
Collection was modified; enumeration operation might not execute. : System.InvalidOperationException: Collection was modified; enumeration operation might not execute.
at System.Data.RBTree`1.RBTreeEnumerat or.MoveNext()
at System.Linq.Enumerable.<CastIterato r>d__97`1.MoveNext()
at System.Linq.Enumerable.WhereEnumera bleIterator`1.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumera ble`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at MyProduct.FileParser.Types.CWR.PWRT ype.GetPublishers(CWRWorkInstances instances, Nullable`1 setTypeGroupId)
at MyProduct.FileParser.Validation.Con create.PwrTypeValidation.ValidatePu blisherNumber()
at MyProduct.FileParser.Validation.Con create.PwrTypeValidation.Validate()
at MyProduct.FileParser.Types.CWR.PWRT ype.StoreRecord(CWRWorkInstances workInstances, CWRWorkParsingContext context)
at MyProduct.FileParser.Groups.CWR.NWR Group.StoreGroup(Int32 workBatchID, CWRFileCommonData commonData)
at MyProduct.FileParser.CWRParser.Proc essCWRFile(String fileName, Boolean wait, Boolean deleteFile, String sourceFileName)


Не могу понять почему ошибка случилась; и почему она не воспроизводима (при перезапуске на тех же данных).
Сама ошибка “Collection was modified; enumeration operation might not execute.” мне понятна; но мой код же не должен к ней приводить. К ней должно привести что-то такое:

Код:
foreach (DataRow currRow in _someDataTable.Rows)
{
    if (/*deletion condition*/)
    {
        someDataTable.Rows.Remove(currRow);
    }
}
Но мой код просто enumerates System.Data.TypedTableBase<MyDataRo wClass> и преобразует результат в массив.
Glen вне форума Ответить с цитированием
Старый 14.04.2019, 03:08   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

внутри foreach низя удалять записи из этой же коллекции.
как вариант: поменять цикл на for с декрементом (от последней строки к первой).
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Необработанное исключение типа "System.FormatException" произошло в System.Data.dll - Visual C++ БД zendau Общие вопросы .NET 3 30.06.2017 21:54
Необработанное исключение типа "System.ArgumentException" в System.Data.dll max_prorok Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 3 23.09.2014 09:45
После обновления System.Data.Entity.Database.Default ConnectionFactory является устаревшим Onni ASP.NET 0 24.11.2013 13:45
References на проекте System.Data.SQLite Medet_man C# (си шарп) 0 06.06.2012 10:05
System.data.SqlServerCe, version=3.5.1.0 IntoTheRain Общие вопросы C/C++ 0 07.09.2009 15:55