Re[4]: ArrayList.ToArray() ??
От: Ken Keray Россия  
Дата: 02.08.06 00:22
Оценка:
Здравствуйте, RustM, Вы писали:

RM>Здравствуйте, Ken Keray, Вы писали:


KK>>Здравствуйте, Codechanger, Вы писали:


C>>>Здравствуйте, Аноним, Вы писали:


KK>>Ничего подобного — ToArray() делает полную копию (Copy) а не просто копию ссылок (Shallow Copy)


RM>А проверить религия не позволяет, прежде чем говорить несуразицу?!

RM>ToArray() именно что копирует ссылки, а не создает новые экземпляры.

RM>
            
RM>ArrayList list = new ArrayList(new object[] { 1, 2, 3 });
RM>object[] newObj = list.ToArray();
            
RM>if (Object.ReferenceEquals(newObj[0], list[0]))
RM>    Console.WriteLine("Ссылки идентичны");
RM>else
RM>    Console.WriteLine("Ссылки не идентичны");
RM>


RM>Как видите сслыки идентичны, даже у Value типов, так как прежде чем попасть в коллекцию ArrayList'а происходит их бокиснг


Виноват! В самом деле, копия ссылок. Я проверял, однако пример выбрал не правильный:



            ArrayList list = new ArrayList(new object[] { 1, 2, 3 });
            object[] newObj = list.ToArray();

            newObj[0] = 72; // здесь новая ссылка на новый объект
            
            if (Object.ReferenceEquals(newObj[0], list[0]))
                Console.WriteLine("Ссылки идентичны");
            else
                Console.WriteLine("Ссылки не идентичны");        

            Console.WriteLine(list[0]);


newObj[0] поменялся, а list[0] — нет, вот я и решил, что идёт полная копия
Keray
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.