ArrayList.Add - добавляет только ссылки? - PullRequest
1 голос
/ 19 января 2011

Я не могу найти на MSDN, поэтому я пытаюсь здесь снова :) При добавлении элемента, его в штучной упаковке и ссылка на новый объект добавляется в коллекцию (если это тип значения) или если элемент является ссылочным типом,просто ссылка добавлена ​​в arraylist.Это правильно?

РЕДАКТИРОВАТЬ: Таким образом, он содержит только экземпляры класса Object, где каждый ссылается на значение в куче <</p>

Ответы [ 5 ]

3 голосов
/ 19 января 2011

Это правильно.

В реальном коде, однако, вы должны использовать общие List<T> s вместо ArrayList s.

1 голос
/ 19 января 2011

Да, это правильно.

ArrayList не является универсальным (он из Fx 1.1) и имеет такие элементы, как

void Add(System.Object item)  { ... }

Таким образом, каждый раз, когда вы звоните Add(x), x должен быть преобразован в System.Object напечатанную ссылку. Тривиальное приведение для любой ссылки на объект, но для типа значения необходим бокс.

И присоединиться к большинству здесь: вам никогда не следует (почти) использовать его. Это только для кода, который начался до 2005 года и, возможно, для очень редкой ситуации, когда вы хотите хранить смешанные типы.

0 голосов
/ 19 января 2011

Да, просто добавьте ссылку.

Это называется мелкой копией. В вашем случае вы должны реализовать глубокую копию, чтобы вы могли создать новый объект и скопировать в него свое значение.

0 голосов
/ 19 января 2011

Да, это правильно, но вы все равно не должны использовать ArrayList и придерживаться генериков.

0 голосов
/ 19 января 2011

Да.Это правильно.

Список <> работает по-другому, однако.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...