"Porque há um só Deus,
e um só Mediador entre Deus e os homens, Jesus
Cristo homem."
1 Timóteo 2:5
C# - Copiando uma coleção para um array
Você precisa copiar o conteúdo de uma coleção para um array. |
Fazer isso é bem simples...
Use o método ICollection.CopyTo que é implementado por todas as classes de coleção ou use o método ToArray que é implementado pelas coleções ArrayList, Stack e Queue.
Vamos explicar...
O método
ICollection.CopyTo e o método
ToArray executam aproximadamente a mesma função: eles
executam uma cópia superficial dos elementos contidos em uma coleção para um
array.
A principal diferença é que CopyTo copia os elementos da coleção para um array existente, enquanto que ToArray cria um novo array antes de copiar os elementos da coleção para ele.
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 lidar com os elementos da coleção. Se os tipos não corresponderem, ou nenhuma conversão implícita for possível do tipo do elemento da coleção para o tipo do elemento da matriz, será lançada uma exceção System.InvalidCastException.
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 do array, ou o número de elementos de coleção exceder a capacidade do array, uma exceção System.ArgumentException será lançada.
As classes ArrayList, Stack e Queue e suas versões genéricas também implementam o método ToArray que cria automaticamente uma matriz do tamanho correto para acomodar uma cópia de todos os elementos da coleção.
Se você chamar ToArray sem argumentos, ele retornará um array objeto [], independentemente do tipo de objetos contidos na coleção.
Por
conveniência, o método ArrayList.ToArray tem uma
sobrecarga para a qual você pode passar um objeto System.Type que especifica o
tipo de matriz que o método ToArray deve criar.
(Você ainda deve converter a matriz fortemente tipada retornada para o tipo
correto.)
Agora o código...
1- Copiando o conteúdo de um List() usando CopyTo
private static void ListCopyToArray()
{
//Cria a lista
var lista = new List<int>() { 5, 6, 7, 8, 9, 10, 11, 12 };
// cria um array com o tanho da lista
int[] array = new int[lista.Count];
// Copia a lista para o array
lista.CopyTo(array);
foreach (var item in array)
Write($" {item} ");
}
|
2- Copiando o conteúdo de um List() usando ToArray
private static void ListToArray()
{
//cria uma lista
var lista = new List<int>() { 5, 6, 7, 8, 9, 10, 11, 12 };
//copia a lista para o array
int[] array2 = lista.ToArray();
//percorre o array e exibe os itens
foreach (int valor in array2)
{
Write($" {valor} ");
}
}
|
O resultado final é o mesmo :
O método de extensão ToArray é um método genérico que aloca internamente uma matriz Buffer onde os elementos são copiados.
Agora veremos outro exemplo usando um ArrayList e os métodos CopyTo e ToArray:
using System;
using System.Collections;
using static System.Console;
namespace Exemplo2
{
class Program
{
static void Main(string[] args)
{
// Cria um novo ArrayList e preenche
ArrayList lista = new ArrayList(5);
lista.Add("Macoratti");
lista.Add("Gustavo");
lista.Add("José");
lista.Add("Sônia");
lista.Add("Melissa");
// Cria uma array de strings e copia o ArrayList
string[] array1 = new string[lista.Count];
lista.CopyTo(array1, 0);
// Agora Use o método ToArray para criar
// um objeto array a partir do contèudo da coleção
object[] array2 = lista.ToArray();
// Use o método ArrayList.ToArray para criar um array
// de strings fortemente tipada a partir do conteúdo da coleção
string[] array3 = (string[])lista.ToArray(typeof(String));
// Exibe o contéudo dos arrays
Console.WriteLine("Array 1:");
foreach (string s in array1)
{
WriteLine("\t{0}", s);
}
WriteLine("Array 2:");
foreach (string s in array2)
{
WriteLine("\t{0}", s);
}
WriteLine("Array 3:");
foreach (string s in array3)
{
WriteLine("\t{0}", s);
}
ReadLine();
}
}
}
|
O resultado obtido é visto abaixo:
Pegue o código completo do projeto aqui: CShp_CollectionArray.zip
"Porque há um só Deus,
e um só Mediador entre Deus e os homens, Jesus
Cristo homem."
1 Timóteo 2:5
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 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Criando uma proteção de tela - Macoratti
C# - Tratando com Coleções - Macoratti
C# - Escolhendo a coleção correta para sua necessidade - Macoratti
VB.NET - Usando Coleções - Macoratti
VB.NET - Usando Coleções do tipo List(Of T) - Macoratti.net
C# - Trabalhando com Coleções Genéricas do tipo List(<T>) - Macoratti
C# - Operações com Collections - Macoratti