Эй, люди
вчера я работал над некоторым кодом и думал, что сохраню итерацию foreach и использую расширение find для объекта List <>, но так и не получил его. позже я реорганизовал код, чтобы использовать foreach с оператором lamda where, и это нашло мой элемент каждый раз.
Мои 2 версии кода размещены ниже:
Не рабочая версия:
private XmlCell FindCell(string id)
{
XmlSection section = new XmlSection(SectionNode);
XmlCell currentCell = null;
foreach (XmlBlock block in section.Blocks)
{
foreach (XmlRow row in block.Rows)
{
currentCell = row.Cells.Find(cell => string.Equals(cell.Id, id));
}
}
Assert.IsNotNull(currentCell, string.Format("Cell with id {0} not found", id));
return currentCell;
}
рабочая версия:
XmlSection section = new XmlSection(SectionNode);
XmlCell currentCell = null;
foreach (XmlBlock block in section.Blocks)
{
foreach (XmlRow row in block.Rows)
{
foreach (XmlCell cell in row.Cells.Where(cell => string.Equals(cell.Id, id)))
{
return cell;
}
}
}
Assert.IsNotNull(currentCell, string.Format("Cell with id {0} not found", id));
return currentCell;
может кто-нибудь plx объяснить, почему первый бит кода не выполняет работу, msdn говорит, что метод find возвращает первый экземпляр, который он находит в списке.
я даже сталкивался с ошибками "Коллекция была изменена; операция перечисления может не выполняться", почему?