ArrayList.ToArray() ??
От: Аноним  
Дата: 18.11.05 09:54
Оценка:
Всем доброго дня!
Скажите, правильно ли я понял: если есть экземляр ArrayList list, содержащий N экземпляров класса Foo (не ValueType), то после вызова

Foo[] array = (Foo[])list.ToArray(typeof(Foo));

экземляров класса Foo останеться N, а ссылок на экземпляры Foo станет 2N ???
Re: ArrayList.ToArray() ??
От: Codechanger Россия  
Дата: 18.11.05 10:04
Оценка: -1
Здравствуйте, Аноним, Вы писали:

А>Всем доброго дня!

А>Скажите, правильно ли я понял: если есть экземляр ArrayList list, содержащий N экземпляров класса Foo (не ValueType), то после вызова

А>
Foo[] array = (Foo[])list.ToArray(typeof(Foo));

А>экземляров класса Foo останеться N, а ссылок на экземпляры Foo станет 2N ???
А то... это вытекает из того, что все сложные типы — Reference-type.
struct
От: nzeemin Россия http://nzeemin.livejournal.com/
Дата: 19.11.05 13:05
Оценка:
Здравствуйте, Codechanger, Вы писали:

C>все сложные типы — Reference-type


Не совсем так. struct — это сложный тип, но он value-type.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
ArrayList.ToArray() ??
От: Аноним  
Дата: 18.11.05 13:19
Оценка:
а вообще наверное да.
--------------------------------
Авто-подпись — дешевый понт!


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[2]: ArrayList.ToArray() ??
От: Ken Keray Россия  
Дата: 31.07.06 07:57
Оценка: -3
Здравствуйте, Codechanger, Вы писали:

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


А>>Всем доброго дня!

А>>Скажите, правильно ли я понял: если есть экземляр ArrayList list, содержащий N экземпляров класса Foo (не ValueType), то после вызова

А>>
Foo[] array = (Foo[])list.ToArray(typeof(Foo));

А>>экземляров класса Foo останеться N, а ссылок на экземпляры Foo станет 2N ???
C>А то... это вытекает из того, что все сложные типы — Reference-type.

Ничего подобного — ToArray() делает полную копию (Copy) а не просто копию ссылок (Shallow Copy)
Keray
Re[3]: ArrayList.ToArray() ??
От: RustM Россия  
Дата: 01.08.06 21:04
Оценка:
Здравствуйте, Ken Keray, Вы писали:

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


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


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


А проверить религия не позволяет, прежде чем говорить несуразицу?!
ToArray() именно что копирует ссылки, а не создает новые экземпляры.

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


Как видите сслыки идентичны, даже у Value типов, так как прежде чем попасть в коллекцию ArrayList'а происходит их бокиснг
... << RSDN@Home 1.2.0 alpha rev. 655>>
Re: ArrayList.ToArray() ??
От: RustM Россия  
Дата: 01.08.06 21:05
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Всем доброго дня!

А>Скажите, правильно ли я понял: если есть экземляр ArrayList list, содержащий N экземпляров класса Foo (не ValueType), то после вызова

А>
Foo[] array = (Foo[])list.ToArray(typeof(Foo));

А>экземляров класса Foo останеться N, а ссылок на экземпляры Foo станет 2N ???

Совершенно верно
... << RSDN@Home 1.2.0 alpha rev. 655>>
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...
Пока на собственное сообщение не было ответов, его можно удалить.