VB .NET - Copiando uma coleção para um Array
  Você esta precisando copiar o conteúdo de uma coleção para um Array ? Veja como fazer isso neste tutorial...

Podemos copiar o conteúdo de uma coleção para um Array usando o método ICollection.CopyTo implementado por todas as classes de coleção.

Outra opção é usar o método ToArray implementado pelas coleções ArrayList, Stack e Queue, bem como seus respectivas versões genéricas List(Of T), Stack(Of T) e Queue (Of T).

O método ICollection.CopyTo e o método ToArray executam aproximadamente a mesma função: eles fazem uma cópia dos elementos contidos em uma coleção para um array.

Ambos os métodos realizam apenas uma cópia superficial, o que significa que os dados na memória são simplesmente copiados de um local para outro em vez do método de cópia do objecto de destino a ser chamado, que é referido como uma cópia profunda.

A principal diferença é que CopyTo copia os elementos da coleção para um array existente, enquanto ToArray cria um novo array antes de copiar os elementos da coleção para ela.

O método CopyTo usa dois argumentos: um array e um índice.

O array é o alvo da operação de cópia e deve ser de um tipo apropriado para manipular os elementos da coleção. Se os tipos não coincidirem, ou nenhuma conversão implícita for possível a partir do tipo do elemento da coleção para o tipo do elmento do array, uma exceção System.InvalidCastException será lançada.

O índice é o elemento inicial da matriz onde os elementos da coleção serão copiados. Se o índice for igual ou maior que o comprimento da matriz, ou o número de elementos da coleção exceder a capacidade da matriz, uma exceção System.ArgumentException será lançada.

Recursos Usados:

Criando o projeto no VS Community 2017

Abra no VS community 2017 e no menu File clique em New Project;

A seguir selecione o template Visual Basic -> Windows -> Console Application e informe o nome Vbn_Collection_Array e clique em OK;

Inclua a seguir o código abaixo no arquivo Module1.vb :
 
Module Module1

Sub Main()

' cria e inicializa um ArrayList que é a nossa fonte de dados origem
Dim ColecaoOrigem As New ArrayList()
ColecaoOrigem.Add("Palmeiras")
ColecaoOrigem.Add("Santos")
ColecaoOrigem.Add("São Paulo")
ColecaoOrigem.Add("Corinthians")
ColecaoOrigem.Add("Ponte Preta")
ColecaoOrigem.Add("Portuguesa")

' Cria e inicializa um array de uma dimensão onde vamos copiar os dados
Dim ArrayDestino(14) As String
ArrayDestino(0) = "Vasco"
ArrayDestino(1) = "Flamengo"
ArrayDestino(2) = "Fluminense"
ArrayDestino(3) = "Botafogo"
ArrayDestino(4) = "Madureira"
ArrayDestino(5) = "Bangu"
ArrayDestino(6) = "Volta Redonda"
ArrayDestino(7) = "BoaVista"

' Exibe os valores do Array destino
Console.WriteLine("O Array Destino contém os seguintes elementos :")
ImprimirValores(ArrayDestino, " "c)

' Copia o segundo elemento do coleção fonte para o array de destino inciando no indice 7
ColecaoOrigem.CopyTo(1, ArrayDestino, 7, 1)

' Exibe os valores do array destino
ImprimirValores(ArrayDestino, " "c)

' Copia a coleção inteira para o array de destino iniciando no indice 6
ColecaoOrigem.CopyTo(ArrayDestino, 6)

' Exibe os valores do array Destino
ImprimirValores(ArrayDestino, " "c)

' Copia a coleção inteira para o array de destino iniciando no indice 0
ColecaoOrigem.CopyTo(ArrayDestino)

' Exibe os valores do array destino
ImprimirValores(ArrayDestino, " "c)

Console.ReadKey()

End Sub

Public Sub ImprimirValores(meuArray() As String, Separador As Char)
     Dim i As Integer
     For i = 0 To meuArray.Length - 1
         Console.Write("{0}{1}", Separador, meuArray(i))
     Next i
     Console.WriteLine()
End Sub

End Module

Executando o projeto teremos o resultado a seguir:

Os elmentos destacados são os elementos que foram copiados da coleção origem para o array de destino.

Vamos entender o código:

1 - ColecaoOrigem.CopyTo(1, ArrayDestino, 7, 1) - Copia o segundo elemento do coleção fonte - ColecaoOrigem -  para o array de destino - ArrayDestino - inciando no indice 7

2 - ColecaoOrigem.CopyTo(ArrayDestino, 6) -  Copia a coleção de origem inteira para o array de destino iniciando no indice 6;

3 -  ColecaoOrigem.CopyTo(ArrayDestino) -  Copia a coleção de origem inteira para o array de destino iniciando no indice 0;

Destancao que :

1 - O valor do índice de um array é baseado em zero. Assim o índice zero indica o primeiro elemento;
2 - O array de destino deve ser de um tipo compatível;
3 - Os elmentos são copiados para o array de destino na mesma ordem na qual o enumerador iterage sobre a coleção de origem; 

Para concluir vejamos mais um exemplo usando o método CopyTo() , desta vez usando uma coleção List(Of T).

Module Module1
    Sub Main()
        ' Cria uma lista com 3 elementos
        Dim lista = New List(Of Integer)() From {5555, 666, 7777}
        ' Cria um array com tamanho igual a 3
        Dim array As Integer() = New Integer(lista.Count - 1) {}
        ' Copia a lista inteira para o array a partir do índice zero
        lista.CopyTo(array)
        'Exibe os valores
        Dim i As Integer
        For i = 0 To array.Length - 1
            Console.Write("{0}{1}", " ", array(i))
        Next i
        Console.ReadKey()
    End Sub
End Module

Pegue o projeto completo neste link : Vbn_Collection_Array.zip

1 Todo aquele que crê que Jesus é o Cristo, é nascido de Deus; e todo aquele que ama ao que o gerou também ama ao que dele é nascido. 2 Nisto conhecemos que amamos os filhos de Deus, quando amamos a Deus e guardamos os seus mandamentos.
1 João 5:1,2

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti