Coleções
Coleções em C# são estruturas de dados que permitem armazenar, gerenciar e manipular grupos de objetos de forma eficiente e flexível. Diferente de arrays estáticos, as coleções oferecem tamanho dinâmico, métodos avançados para pesquisa, ordenação, filtragem e iteração, sendo essenciais para desenvolver aplicações robustas e escaláveis. O uso correto de coleções permite aplicar princípios de programação orientada a objetos, como encapsulamento, herança e polimorfismo, e facilita a implementação de algoritmos complexos de forma legível e eficiente.
No desenvolvimento em C#, os tipos de coleções mais comuns incluem List, Dictionary, HashSet, Queue e Stack. List é ideal para armazenar elementos ordenados e dinâmicos; Dictionary permite mapeamento chave-valor com acesso rápido; HashSet armazena elementos únicos sem ordem definida; Queue segue a lógica FIFO (first-in, first-out) e Stack a lógica LIFO (last-in, first-out). Escolher a coleção correta é fundamental para otimização de desempenho, manutenção do código e prevenção de erros comuns, como duplicações ou exceções de índice.
Neste tutorial, você aprenderá a adicionar, remover, pesquisar e iterar elementos em coleções, além de aplicar tratamento de exceções, otimização de desempenho e integração em arquiteturas de software. Ao final, o desenvolvedor será capaz de utilizar coleções de maneira estratégica, promovendo código eficiente, seguro e escalável em projetos reais de C#.
Exemplo Básico
textusing System;
using System.Collections.Generic;
namespace ColecoesExample
{
class Program
{
static void Main(string\[] args)
{
// Criação de uma lista dinâmica de números
List<int> numeros = new List<int>();
// Adição de elementos
numeros.Add(10);
numeros.Add(20);
numeros.Add(30);
// Exibição dos elementos
Console.WriteLine("Lista de números:");
foreach (int num in numeros)
{
Console.WriteLine(num);
}
// Verificação de existência de um elemento
if (numeros.Contains(20))
{
Console.WriteLine("O número 20 está presente na lista.");
}
// Remoção de um elemento
numeros.Remove(10);
Console.WriteLine("Após remover 10:");
numeros.ForEach(n => Console.WriteLine(n));
}
}
}
No exemplo acima, utilizamos List
O uso de genéricos assegura tipo seguro, evitando casting desnecessário e erros em tempo de execução. List é ideal para armazenamento de dados sequenciais e flexível, sendo aplicável em cenários como listas de usuários, tarefas ou valores numéricos. A abordagem apresentada prepara o desenvolvedor para trabalhar com coleções mais complexas e adaptáveis a diferentes requisitos de projeto.
Exemplo Prático
textusing System;
using System.Collections.Generic;
namespace ColecoesAvancadas
{
class Produto
{
public int Id { get; set; }
public string Nome { get; set; }
public double Preco { get; set; }
}
class Program
{
static void Main(string[] args)
{
// Criação de um dicionário de produtos
Dictionary<int, Produto> produtos = new Dictionary<int, Produto>();
// Adição de produtos
produtos.Add(1, new Produto { Id = 1, Nome = "Laptop", Preco = 4500 });
produtos.Add(2, new Produto { Id = 2, Nome = "Mouse", Preco = 150 });
produtos.Add(3, new Produto { Id = 3, Nome = "Teclado", Preco = 300 });
// Exibição de produtos com preço acima de 200
Console.WriteLine("Produtos com preço acima de 200:");
foreach (var produto in produtos.Values)
{
if (produto.Preco > 200)
Console.WriteLine($"{produto.Nome} - Preço: {produto.Preco}");
}
// Tratamento de erro para chave duplicada
try
{
produtos.Add(2, new Produto { Id = 2, Nome = "Monitor", Preco = 1200 });
}
catch (ArgumentException ex)
{
Console.WriteLine("Erro: chave duplicada. " + ex.Message);
}
}
}
}
Neste exemplo avançado, utilizamos Dictionary\
A abordagem ilustra como escolher a coleção correta afeta diretamente a performance e integridade dos dados, sendo aplicável em sistemas de inventário, controle de estoque e análise de dados. O uso de genéricos e estrutura orientada a objetos facilita manutenção, escalabilidade e integração com outros componentes do software.
Boas práticas incluem: escolher a coleção adequada ao tipo de dados e operação, utilizar foreach ou LINQ para iteração, tratar exceções corretamente e minimizar cópias desnecessárias. Erros comuns incluem uso inadequado de List em buscas intensivas, negligenciar chaves duplicadas em Dictionary e criar overhead de memória com cópias desnecessárias. Ferramentas de depuração ajudam a identificar problemas, enquanto otimização de performance envolve escolha correta de coleções e redução de operações custosas. Segurança é garantida validando entradas e evitando inconsistências nos dados.
📊 Tabela de Referência
C# Element/Concept | Description | Usage Example |
---|---|---|
List<T> | Armazena elementos ordenados e dinâmicos | List<int> numeros = new List<int>(); |
Dictionary\<TKey, TValue> | Mapeamento chave-valor com acesso rápido | Dictionary\<int, string> dict = new Dictionary\<int, string>(); |
HashSet<T> | Armazena elementos únicos | HashSet<string> nomesUnicos = new HashSet<string>(); |
Queue<T> | Estrutura FIFO (first-in, first-out) | Queue<int> fila = new Queue<int>(); |
Stack<T> | Estrutura LIFO (last-in, first-out) | Stack<int> pilha = new Stack<int>(); |
O aprendizado de coleções em C# proporciona compreensão profunda de estruturas de dados, algoritmos e princípios de OOP, permitindo desenvolver aplicações robustas e escaláveis. O próximo passo envolve LINQ, coleções concorrentes e padrões de design. Em projetos reais, coleções são aplicáveis em inventário, cache, pipelines de dados e manipulação de grandes volumes de informações. Recursos oficiais e comunidades online oferecem suporte contínuo para aprimorar habilidades e resolver desafios práticos.
🧠 Teste Seu Conhecimento
Teste seu Conhecimento
Teste sua compreensão deste tópico com questões práticas.
📝 Instruções
- Leia cada pergunta cuidadosamente
- Selecione a melhor resposta para cada pergunta
- Você pode refazer o quiz quantas vezes quiser
- Seu progresso será mostrado no topo