Столкнулся со следующей проблемой:
Экземпляр var checkRow, получает значение itemRows, далее, в метод передаются оба объекта, из которых ref itemRows
При выполнении метода, изменении данных в checkRow, меняются значения в itemRows
// В данном методе инициализируются объекты и вызывается метод
var itemRows = GetInfoFromXml.GetUkdRows(node);
var checkRow = itemRows;
//var checkRow = GetInfoFromXml.GetUkdRows(node);
checkRow = GetTanderUkdOwnRow(ref itemRows, checkRow);
// Сам метод
private static CalcItemRow[] GetTanderUkdOwnRow(ref CalcItemRow[] itemRows, CalcItemRow[] checkRow)
{
foreach (var row in checkRow)
{
row.PosCase.Replace("(док)", "программа");
}
checkRow[0] = Recalculation(ref itemRows[0], checkRow[0]);
checkRow[0].PosName = "Расчёты программой:";
checkRow[1] = Recalculation(ref itemRows[1], checkRow[1]);
checkRow[2] = IncreasingRow(ref itemRows[2], checkRow[2], checkRow[0], checkRow[1]);
checkRow[3] = DegreasingRow(ref itemRows[3], checkRow[3], checkRow[0], checkRow[1]);
return checkRow;
}
Изначально передавал только ссылку на itemRows, копию создавал уже в методе.
При выполнении строки checkRow[0].PosName = "Расчёты программой:";, [0] объект itemRows так же получает указанное значение параметра, по какой причине - не совсем понятно. Аналогично при любых изменениях checkRow
Если checkRow задавать с помощью закомменченной строки, всё выполняется согласно логике.
Это корректное поведение? Если да - просьба поделиться литературой. При воспроизведении ситуации с int, всё отрабатывает нормально.
А при выполнении текущего кода, изменяется всё.
Как говорил ранее - изначально передавал только ref itemRows, уже в теле метода создавал новую переменную и присваивал (копировал) itemRows.
– Аркадий Карабанов Oct 02 '18 at 07:19Так же пробовал копировать через Clone и CopyTo, не помогло.
– Аркадий Карабанов Oct 02 '18 at 07:31var checkRow = itemRows;не создает новый массив. Она создает копию ссылки на массив. Почитайте уже, наконец, литературу. Тот же Троелсен, глава 4, параграф "Типы значений и ссылочные типы" – Андрей NOP Oct 02 '18 at 07:35