Рассмотрим требование изменить элемент данных в одном или нескольких свойствах объекта глубиной 5 или 6 уровней.
Существуют вложенные коллекции, которые необходимо перебрать, чтобы получить свойство, которое требует проверки и модификации.
Здесь мы вызываем метод, который очищает уличный адрес сотрудника. Поскольку мы меняем данные внутри циклов, текущей реализации необходим цикл for
для предотвращения исключения:
Невозможно присвоить «someVariable», поскольку это «переменная итерации foreach»
Вот текущий алгоритм (обфусцированный) с вложенным foreach
и for
.
foreach (var emp in company.internalData.Emps)
{
foreach (var addr in emp.privateData.Addresses)
{
int numberAddresses = addr.Items.Length;
for (int i = 0; i < numberAddresses; i++)
{
//transform this street address via a static method
if (addr.Items[i].Type =="StreetAddress")
addr.Items[i].Text = CleanStreetAddressLine(addr.Items[i].Text);
}
}
}
Вопрос:
Можно ли переопределить этот алгоритм с помощью LINQ? Требуется, чтобы исходная коллекция изменила данные при вызове этого статического метода.
Обновление: Я думал / склонялся в направлении решения типа jQuery / селектор. Я специально не сформулировал этот вопрос таким образом. Я понимаю, что я переборщил с этой идеей (без побочных эффектов). Спасибо всем! Если есть такой способ выполнения jQuery-подобного селектора, давайте посмотрим на это!