Есть массив и список такого же типа. В цикле я изменяю массив и после каждого изменения добавляю его в список (по окончанию цикла хочу получить список из всех массивов которые получились в результате изменений). Но при выводе списка все его элементы одинаковы, аналогичны последнему добавленному в список массиву. Почему это происходит?
byte[,] mat = new byte[3, 3];
List<byte[,]> list = new List<byte[,]>();
for (int m = 0; m < 9; ++m)
{
byte i = 0;
byte j = 0;
// Поиск пустой ячейки (нулевой)
bool flag = false;
for (i = 0; i < 3; ++i)
{
for (j = 0; j < 3; ++j)
if (mat[i, j] == 0)
{
flag = true;
break;
}
if (flag) break;
}
// Добавление измененного массива в список
mat[i, j] = 1;
list.Add(mat);
// Вывод всех элементов списка
foreach (byte[,] a in list)
{
PrintMatrix(a);
}
}
Все дело в том, что массивы - это ссылочный тип данных.
Вот что это значит в контексте вашей задачи: ваш список состоит не из
одинаковых объектов, а из одного объекта. Как так получилось? Ответ :
list.Add(mat);
на list.Add((byte[,])mat.Clone());
но такое решение можно использовать только с массивами типов значений.Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Нужно передавать данные между приложениями на одном компьютереИспользую такой код:
Есть приложение написанное на C#, все параметры приложения прописаны в configini