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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2016, 17:50   #1
Ковер
Пользователь
 
Регистрация: 18.09.2016
Сообщений: 30
Вопрос Списки в C#

Здравствуйте.
Почему если список (List) 1 сделать равным списку 2, а потом очистить список 2, то и список 1 тоже очищается?

Вот что у меня на практике:
Имеется код


Изначально списки thirdSpreadX и thirdSpreadX пусты. После присвоения в них по восемь членов.


Потом мы обнуляем списки firstSpreadX и firstSpreadY, к которым были приравнены первые.


То же самое мы проделываем с переменной zeroPoints2 – изначально она была равна нулю, потом ее приравняли к переменной zeroPoints, и они обе стали равными нулю. Потом переменная zeroPoints обнуляется.


И далее начинается проблема: после действий выше списки thirdSpreadX и thirdSpreadX тоже очищаются, хотя переменная zeroPoints2 сохраняет свое значение.


И закономерно возникает ошибка.


Почему в списка не сохраняется содержимое?
Изображения
Тип файла: png 1.png (11.7 Кб, 110 просмотров)
Тип файла: png 2.png (6.2 Кб, 97 просмотров)
Тип файла: png 3.png (6.4 Кб, 95 просмотров)
Тип файла: png 4.png (9.6 Кб, 94 просмотров)
Тип файла: png 5.png (10.0 Кб, 93 просмотров)
Тип файла: png 4 9.png (91.5 Кб, 153 просмотров)
Ковер вне форума Ответить с цитированием
Старый 22.09.2016, 17:54   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

всё что class, это ссылочный тип данных.
делая list2=list1 вы меняете лишь ссылку, вы не создаете нового объекта.
итого список у вас лишь один.

ссылка это как бумажка с вашим домашним адресом, бумажек может быть много, но вы же один?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.09.2016, 18:01   #3
Ковер
Пользователь
 
Регистрация: 18.09.2016
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
всё что class, это ссылочный тип данных.
делая list2=list1 вы меняете лишь ссылку, вы не создаете нового объекта.
итого список у вас лишь один.

ссылка это как бумажка с вашим домашним адресом, бумажек может быть много, но вы же один?
А как сделать так, чтобы создался новый объект? С помощью цикла for каждый отдельно добавить в требуемый список?
Ковер вне форума Ответить с цитированием
Старый 22.09.2016, 18:05   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

у List есть конструктор принимающий перечислимое(IEnumerable)
Код:
var list2 = new List<int>(list1)
тип генерика подставите сами.

и создавайте темы по C# в этом разделе, пожалуйста.
вы хоть и учитесь, но не похоже на задачки от студентов.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 22.09.2016 в 18:09.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.09.2016, 18:06   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Если надо скопировать содержимое, то можно например

Код:
var list2 = new List<int>(list1);
Зачем давать код в виде картинок вместо текста?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 22.09.2016, 18:10   #6
Ковер
Пользователь
 
Регистрация: 18.09.2016
Сообщений: 30
По умолчанию

Спасибо большое за ответы.

Цитата:
и создавайте темы по C# в этом разделе, пожалуйста.
вы хоть и учитесь, но не похоже на задачки от студентов.
Понял, буду.

Цитата:
Зачем давать код в виде картинок вместо текста?
Чтобы было видно, что отображается при пошаговой отладке. Просто, как я сейчас вижу, неудачное сочетание цветовой темы VStudio и сообщений на этом форуме. В другой раз буду делать темное цветовое оформление.
Ковер вне форума Ответить с цитированием
Старый 22.09.2016, 18:14   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
вы хоть и учитесь, но не похоже на задачки от студентов.
Вполне похоже. Но в том разделе 99% тем от унылых халявщиков просящих решить за них, поэтому да, лучше не лезть в ту помойку
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Списки ant93 Общие вопросы C/C++ 0 29.05.2013 15:54
Списки sanchoflat Общие вопросы C/C++ 0 29.09.2012 23:13
Списки Fryg HTML и CSS 1 10.12.2011 18:38
Списки Mr_skiner Общие вопросы Delphi 2 20.04.2011 08:51