Home All Groups Group Topic Archive Search About

Copy List(Of type) to another List(Of type)

Author
4 Apr 2006 9:00 AM
Muskito
Hi,

Is it possible to copy the entire List(Of type) object to another
List(Of type) object
(they are both of the same type ofcourse) - without keeping the
reference?

There's the CopyTo method, but it only copies the data to a flat array.

I Need this for Backup in my program, when i update the master list and
want to rollback the entire list to the Pre-Update state...

Right now i'm considering creating a specific function to loop on the
entire list and copy field by field...

Better suggestions will be much appreciated...

Author
4 Apr 2006 9:17 AM
Larry Lard
Muskito wrote:
> Hi,
>
> Is it possible to copy the entire List(Of type) object to another
> List(Of type) object
> (they are both of the same type ofcourse) - without keeping the
> reference?
>
> There's the CopyTo method, but it only copies the data to a flat array.

One of the contructors for List(Of T) takes an IEnumerable(Of T) from
which the new list is constructed. List(Of T) implements IEnumerable(Of
T) so we can do:


        Dim listA, listB As List(Of Integer)

        listA = New List(Of Integer)
        listA.Add(1)
        listA.Add(2)
        listA.Add(5)

        listB = New List(Of Integer)(listA)


This is just the same as the way all the old non-generic collections
generally have a constructor that takes an IList or an ICollection to
populate the new collection from.

--
Larry Lard
Replies to group please
Author
4 Apr 2006 9:31 AM
Muskito
Hi,

Thanks for the answer - but it doesn't work...
It does keep the reference.. when i update something on the first list,
it is also updated on the backup list...
Author
4 Apr 2006 9:43 AM
Larry Lard
Muskito wrote:
> Hi,
>
> Thanks for the answer - but it doesn't work...
> It does keep the reference.. when i update something on the first list,
> it is also updated on the backup list...

Yes, this is the default behvaiour of reference types. There is no
general 'copy object' method, since 'copying' means a different thing
to every classs. List(Of T) can't possibly know how to copy a T, so
you're going to have to do it yourself.

--
Larry Lard
Replies to group please
Author
4 Apr 2006 9:50 AM
Muskito
Meanwhile on the other side of town... :)

I Thought this would be the final answer.... so i already made my
HomeMade copy function...

Thanks!
Author
10 Apr 2006 11:49 AM
Jay B. Harlow [MVP - Outlook]
Larry,
| This is just the same as the way all the old non-generic collections
| generally have a constructor that takes an IList or an ICollection to
| populate the new collection from.

Be mindful: System.Collections.ObjectModel.Collection(Of T) & its
derivatives, such as BindingList(Of T), wraps the IList(Of T) passed to the
contractor, it does not copy the contents.

Collection(Of T) wrapping the IList(Of T) is very useful in that it allows
BindingList(Of T) to mediate the binding between one your collections & a
Windows Form. It also allows Collection(Of T) to be based on other
collection types, such as LinkedList(Of T) or an Array.

NOTE: To use LinkedList(Of T) with Collection(Of T) you need a version of
LinkedList(Of T) that implements IList(Of T)...

--
Hope this helps
Jay B. Harlow [MVP - Outlook]
..NET Application Architect, Enthusiast, & Evangelist
T.S. Bradley - http://www.tsbradley.net


Show quoteHide quote
"Larry Lard" <larryl***@hotmail.com> wrote in message
news:1144142262.627507.190340@g10g2000cwb.googlegroups.com...
|
| Muskito wrote:
| > Hi,
| >
| > Is it possible to copy the entire List(Of type) object to another
| > List(Of type) object
| > (they are both of the same type ofcourse) - without keeping the
| > reference?
| >
| > There's the CopyTo method, but it only copies the data to a flat array.
|
| One of the contructors for List(Of T) takes an IEnumerable(Of T) from
| which the new list is constructed. List(Of T) implements IEnumerable(Of
| T) so we can do:
|
|
|        Dim listA, listB As List(Of Integer)
|
|        listA = New List(Of Integer)
|        listA.Add(1)
|        listA.Add(2)
|        listA.Add(5)
|
|        listB = New List(Of Integer)(listA)
|
|
| This is just the same as the way all the old non-generic collections
| generally have a constructor that takes an IList or an ICollection to
| populate the new collection from.
|
| --
| Larry Lard
| Replies to group please
|