Olá, tudo bom? Meu nome é André Bessa, sou um homem negro com barba por fazer, cabelo baixo e rosto arredondado. Serei seu instrutor ao longo deste treinamento de C# que abordará arrays e coleções de objetos.
Este curso é voltado para pessoas que estão se aprofundando na linguagem C# e querem dar um passo a mais na evolução de seu aprendizado. Trabalharemos em um projeto do ByteBank, fazendo implementações na área de atendimento ao cliente, a pedido do gerente de contas do banco.
Definiremos uma classe chamada ByteBankAtendimento
que implementa uma lista de objetos. Nesse sistema, teremos uma série de opções para cadastrar, listar, remover, ordenar e pesquisar as contas dessa instituição.
Ao executar o projeto final, teremos uma aplicação console com todas essas funcionalidades. Por exemplo, pressionando 1 e informando os dados necessários (número da agência, saldo inicial, nome do titular, CPF do titular e profissão), conseguiremos cadastrar uma nova conta. Pressionando 2, listaremos todas as contas, e assim por diante.
Desse modo, entenderemos o que são arrays: a sua sintaxe, como criá-los e quais são as classes disponíveis no .NET para criar arrays de objetos (como as classes ArrayList
e List<T>
).
Usando esses conceitos de orientação a objetos na linguagem C#, o resultado deste curso será um programa para manipular um array ou uma coleção de objetos, que simulará nossa fonte de dados do sistema.
Para tirar melhor proveito do conteúdo, recomendamos fortemente que você já tenha estudado conceitos básicos da linguagem C#, como a criação de variáveis e a estrutura de decisão e repetição, além de conceitos de orientação a objetos, como classes, objetos e interfaces.
Ficou animado? Vamos estudar!
Ao longo deste curso, usaremos o Visual Studio Community 2022 para desenvolver nosso projeto de atendimento ao cliente do ByteBank, a pedido do gerente de contas do banco.
Com o projeto inicial aberto no Visual Studio, na barra superior podemos acessar "Exibir > Gerenciador de Soluções" para abrir o gerenciador à direita da tela e observarmos a estrutura de pastas e arquivos.
Vamos inserir alguns códigos no arquivo Program.cs
para compreender alguns conceitos iniciais. Começaremos nossos estudos falando sobre arrays.
Imagine, por exemplo, que precisamos encontrar a média entre 5 idades:
Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");
int idade = 30;
int idade = 40;
int idade = 17;
int idade = 21;
int idade = 18;
De início, já obtemos um erro, pois em um mesmo contexto estamos tentando usar o mesmo nome para variáveis diferentes. Então, vamos renomeá-las para distingui-las:
Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");
int idade0 = 30;
int idade1 = 40;
int idade2 = 17;
int idade3 = 21;
int idade4 = 18;
Esse padrão não fica muito bom, mas funciona. Para encontrar a média entre essas idades, vamos somar o valor das variáveis e dividir o resultado por 5:
Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");
int idade0 = 30;
int idade1 = 40;
int idade2 = 17;
int idade3 = 21;
int idade4 = 18;
int media = (idade0+ idade1+ idade2+ idade3+ idade4) / 5;
Dessa forma, obtemos a média, porém o processo foi trabalhoso. No momento, temos apenas 5 idades para fazer a média, mas e se tivéssemos 10, ou 20, ou 30, ou até 100 idades? Seria muito complexo para fazer manualmente! Para evitar esse problema, seria interessante termos apenas uma variável para armazenar todos os valores — e este é exatamente o conceito de array.
Um array é uma variável especial em que podemos colocar mais de um valor do mesmo tipo. Vamos remover a variável media
, criar um array chamado idades
e, na sequência, analisar sua sintaxe:
Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");
int idade0 = 30;
int idade1 = 40;
int idade2 = 17;
int idade3 = 21;
int idade4 = 18;
int[] idades = new int[5];
Com int[]
, indicamos que nossa variável é um array de valores do tipo int
. Em seguida, usamos new int[5]
para criar uma instância na memória do computador e determinar o tamanho do array, no caso, 5. Essa é uma das sintaxes que podemos usar para criar um array com C#.
Agora, precisamos inserir valores na variável idades
. No .NET, trabalhamos com arrays usando índices, informando-os por meio dos colchetes:
// código anterior omitido
int[] idades = new int[5];
idades[0] = 30;
idades[1] = 40;
idades[2] = 17;
idades[3] = 21;
idades[4] = 18;
É importante ressaltar que os vetores no C# começam com o índice 0, ou seja, a primeira posição do array corresponde ao índice 0. Assim, no índice 0 (posição 1), temos o valor 30. No índice 1 (posição 2), temos o valor 40, e assim por diante.
Agora que criamos uma única variável idades
capaz de armazenar 5 valores inteiros, podemos apagar as variáveis idade0
a idade4
no começo do nosso código:
Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");
int[] idades = new int[5];
idades[0] = 30;
idades[1] = 40;
idades[2] = 17;
idades[3] = 21;
idades[4] = 18;
Sendo assim, já entendemos o básico sobre arrays. Em seguida, para aprofundar nossos estudos, vamos criar um método para percorrer esse array e exibir algumas informações para nós. Por exemplo, podemos retornar o valor de cada posição do array ou fazer a média dos valores nele contido.
A princípio, vamos criar um método chamado TestaArrayInt()
e mover nossa estrutura de array para dentro dele:
Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");
void TestaArrayInt()
{
int[] idades = new int[5];
idades[0] = 30;
idades[1] = 40;
idades[2] = 17;
idades[3] = 21;
idades[4] = 18;
}
Em seguida, vamos exibir uma mensagem com o tamanho do array. Usaremos a interpolação de strings e a propriedade .Length
de idades
, que mostrará o tamanho:
Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");
void TestaArrayInt()
{
int[] idades = new int[5];
idades[0] = 30;
idades[1] = 40;
idades[2] = 17;
idades[3] = 21;
idades[4] = 18;
Console.WriteLine($"Tamanho do Array {idades.Length}");
}
Na sequência, vamos exibir no console cada posição do array. Ou seja, precisamos encontrar uma maneira de passar pelas posições 1, 2, 3, 4 e 5. Para tanto, utilizaremos uma estrutura de iteração, um laço de repetição for
. Basta digitar for
e pressionar a tecla "Tab" duas vezes para gerar um modelo automaticamente:
Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");
void TestaArrayInt()
{
int[] idades = new int[5];
idades[0] = 30;
idades[1] = 40;
idades[2] = 17;
idades[3] = 21;
idades[4] = 18;
Console.WriteLine($"Tamanho do Array {idades.Length}");
for (int i = 0; i < idades.Length; i++)
{
}
}
Começamos no índice 0 (int i = 0
). A cada iteração, i
será incrementado (i++
) e continuaremos repetindo essa estrutura enquanto i
for menor que o tamanho de idades
.
Dentro do for
, criaremos uma variável idade
que receberá um valor do array idades
em um índice específico:
Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");
void TestaArrayInt()
{
int[] idades = new int[5];
idades[0] = 30;
idades[1] = 40;
idades[2] = 17;
idades[3] = 21;
idades[4] = 18;
Console.WriteLine($"Tamanho do Array {idades.Length}");
for (int i = 0; i < idades.Length; i++)
{
int idade = idades[i];
}
}
Na primeira iteração, i
será igual a 0, portanto a variável idade
assumirá o valor de idades[0]
, que corresponde a 30. Na segunda iteração, i
será igual a 1, logo idade
corresponderá a 40, e assim por diante.
Depois, vamos exibir no console o índice e a idade correspondente:
Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");
void TestaArrayInt()
{
int[] idades = new int[5];
idades[0] = 30;
idades[1] = 40;
idades[2] = 17;
idades[3] = 21;
idades[4] = 18;
Console.WriteLine($"Tamanho do Array {idades.Length}");
for (int i = 0; i < idades.Length; i++)
{
int idade = idades[i];
Console.WriteLine($"índice [{i}] = {idade}");
}
}
Por fim, vamos chamar o método na linha 3 do nosso código:
Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");
TestaArrayInt();
void TestaArrayInt()
{
int[] idades = new int[5];
idades[0] = 30;
idades[1] = 40;
idades[2] = 17;
idades[3] = 21;
idades[4] = 18;
Console.WriteLine($"Tamanho do Array {idades.Length}");
for (int i = 0; i < idades.Length; i++)
{
int idade = idades[i];
Console.WriteLine($"índice [{i}] = {idade}");
}
}
Podemos salvar as alterações e executar nosso programa pressionando o play na parte superior do Visual Studio. O projeto será compilado, o console será renderizado e, como resultado, veremos "Tamanho do Array 5" e o valor de cada posição do vetor. Está tudo funcionando como o planejado.
A seguir, vamos calcular a média. Como vimos anteriormente, precisamos somar todos os valores e dividir o resultado por 5. Então, criaremos uma variável chamada acumulador
para somar cada idade à medida que percorremos o vetor. Ou seja, ao final, acumulador
será a soma total das idades e basta o dividirmos por 5:
Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");
TestaArrayInt();
void TestaArrayInt()
{
int[] idades = new int[5];
idades[0] = 30;
idades[1] = 40;
idades[2] = 17;
idades[3] = 21;
idades[4] = 18;
Console.WriteLine($"Tamanho do Array {idades.Length}");
int acumulador = 0;
for (int i = 0; i < idades.Length; i++)
{
int idade = idades[i];
Console.WriteLine($"índice [{i}] = {idade}");
acumulador+=idade;
}
}
Assim, criamos o acumulador
antes do for
e o inicializamos com o valor 0. Já dentro do lado de repetição, a cada iteração, somaremos idade
ao acumulador
. Uma vez finalizado o loop, vamos usar a soma das idades para calcular a média e exibi-la no console:
Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");
TestaArrayInt();
void TestaArrayInt()
{
int[] idades = new int[5];
idades[0] = 30;
idades[1] = 40;
idades[2] = 17;
idades[3] = 21;
idades[4] = 18;
Console.WriteLine($"Tamanho do Array {idades.Length}");
int acumulador = 0;
for (int i = 0; i < idades.Length; i++)
{
int idade = idades[i];
Console.WriteLine($"índice [{i}] = {idade}");
acumulador+=idade;
}
}
int media = acumulador / idades.Length;
Console.WriteLine($"Média de idades = {media}");
Perceba que, em vez de dividir diretamente por 5, usamos idades.Length
. Dessa forma, podemos usar esse mesmo método para outros arrays com outros tamanhos, sem precisar mudar o denominador utilizado em media
.
Vamos salvar as alterações e executar o projeto. Dessa vez, veremos ao final "Média de idade = 25".
Neste vídeo, começamos a estudar os arrays, que são um tipo especial de variável em que conseguimos armazenar mais de um valor do mesmo tipo. Para trabalhar com arrays, usamos os índices tanto para atribuir quanto para retornar valores de posições específicas do vetor.
Na sequência, exploraremos outras possibilidades de como percorrer um array.
Já vimos como criar um array e como percorrê-lo com o laço de repetição for
. Neste vídeo, faremos mais testes com vetores, dessa vez com um array de strings.
Abaixo de TestaArrayInt
, vamos criar um método TestaBuscarPalavra()
que solicitará ao usuário que digite 5 palavras e, depois, que escolha uma delas para buscar no array. Ou seja, é como se cadastrássemos as strings em um banco de dados e, mais tarde, fizéssemos uma consulta nessa base.
Em TestaBuscarPalavras()
, começaremos declarando o vetor arrayDePalavras
:
// código anterior omitido
void TestaBuscarPalavra()
{
string[] arrayDePalavras = new string[5];
}
Em seguida, com o laço for
, criaremos uma estrutura que solicitará ao usuário que informe uma palavra para cada posição do array. Lembre-se que podemos digitar for
e pressionar a tecla "Tab" duas vezes para gerar um modelo.
Dentro do laço de iteração, não usaremos o Console.WriteLine()
. Vamos optar pelo Console.Write()
, pois não queremos pular uma linha. Em seguida, faremos com que o array receba o valor digitado pelo usuário por meio do Console.ReadLine()
:
// código anterior omitido
void TestaBuscarPalavra()
{
string[] arrayDePalavras = new string[5];
for (int i = 0; i < arrayDePalavras.Length; i++)
{
Console.Write($"Digite {i + 1}ª Palavra: ");
arrayDePalavras[i]=Console.ReadLine();
}
}
Note que usamos {i + 1}
, porque o índice 0 corresponderá à primeira palavra. Ou seja, quando i
for igual a 0, o programa solicitará "Digite 1ª Palavra".
Além disso, é importante lembrar que nosso array recebe apenas strings e o Console.ReadLine()
é um método que retorna uma string, por isso nosso código continua funcionando.
Após obter as 5 palavras, a aplicação pedirá ao usuário que especifique a string que deseja encontrar. Vamos armazenar o valor digitado numa variável chamada busca
:
// código anterior omitido
void TestaBuscarPalavra()
{
string[] arrayDePalavras = new string[5];
for (int i = 0; i < arrayDePalavras.Length; i++)
{
Console.Write($"Digite {i + 1}ª Palavra: ");
arrayDePalavras[i]=Console.ReadLine();
}
}
Console.Write("Digite palavra a ser encontrada: ");
var busca = Console.ReadLine();
Note que definimos busca
como um var
— em tempo de execução, o compilador .NET interpretará que o termo antes da igualdade retornará uma string, então definirá o busca
como tipo string.
Recapitulando o que fizemos até agora: vamos percorrer um vetor utilizando o for
e recorrendo aos índices para inserir 5 valores informados pelo usuário. Depois, vamos pedir que digite a palavra que deseja encontrar e armazenaremos essa informação na variável busca
.
Agora, precisamos percorrer o array novamente, comparando cada posição do vetor com o valor de busca
, para verificar se encontramos a palavra desejada ou não. Dessa vez, usaremos a estrutura foreach
— em inglês, "for each" significa "para cada".
Assim como o
for
, podemos digitarforeach
e pressionar a tecla "Tab" duas vezes para gerar um modelo automaticamente.
A estrutura foreach
é mais simples em relação ao for
e nos permite percorrer um array ou uma coleção (que estudaremos mais adiante neste curso). Ela é interessante principalmente quando não precisamos especificar os índices:
// código anterior omitido
foreach (string palavra in arrayDePalavras)
{
}
Então, para cada palavra no arrayDePalavras
, rodaremos o bloco de código contido no foreach
:
// código anterior omitido
foreach (string palavra in arrayDePalavras)
{
if (palavra.Equals(busca))
{
Console.WriteLine($"Palavra encontrada = {busca}.");
}
else
{
Console.WriteLine($"Palavra não encontrada.");
}
}
O método .Equals()
nos permite verificar se uma string é igual a outra. Assim, se palavra
for igual a busca
, vamos exibir no console a frase "Palavra encontrada" seguida da palavra. Do contrário, exibiremos "Palavra não encontrada".
Em outras palavras, o foreach
é outra estrutura de repetição para iterar um array.
É hora de testar. Vamos comentar a chamada de TestaArrayInt()
na linha 3 e criar uma chamada de TestaBuscaPalavra()
na linha 4:
Console.WriteLine("Boas Vindas ao ByteBank, Atendimento.");
//TestaArrayInt();
TestaBuscarPalavra();
// código posterior omitido
Em seguida, vamos salvar e executar o projeto. O programa pedirá para digitarmos 5 palavras, vamos informar: "Andre", "Jose", "Pedro", "Maria" e "Ulisses". Depois, será solicitada a palavra para ser encontrada, digitaremos "Jose". O retorno será o seguinte:
Palavra não encontrada.
Palavra encontrada = Jose.
Palavra não encontrada.
Palavra não encontrada.
Palavra não encontrada.
Não obtivemos o resultado esperado. Para cada iteração, o programa está imprimindo um aviso. O nosso objetivo era que a aplicação apenas retornasse uma mensagem caso a palavra digitada fosse encontrada. Vamos voltar à nossa estrutura foreach
e corrigi-la.
Primeiramente, vamos remover o bloco else
, pois não esperamos nenhum comportamento do programa se a palavra não for encontrada. Além disso, vamos inserir um break
após o Console.WriteLine()
:
// código anterior omitido
foreach (string palavra in arrayDePalavras)
{
if (palavra.Equals(busca))
{
Console.WriteLine($"Palavra encontrada = {busca}.");
break;
}
}
Assim, uma vez que a palavra deseja for encontrada, o break
interromperá o laço de repetição. Outra opção seria usar um return
.
Vamos salvar e rodar o projeto novamente. Informaremos as mesmas 5 palavras e buscaremos por "Jose" mais uma vez. Dessa vez, nosso programa funcionará como o esperado!
Portanto, neste vídeo, criamos um método que trabalha com um array de strings. Digitamos 5 palavras e o programa fará a busca por um termo específico, analisando cada índice do vetor. Em vez do laço for
, optamos pela estrutura foreach
, que nos permite iterar por arrays e coleções (que veremos mais adiante neste curso).
Na sequência, descobriremos mais formas de trabalhar com arrays no .NET.
O curso C#: Trabalhando com Arrays e Coleções possui 197 minutos de vídeos, em um total de 60 atividades. Gostou? Conheça nossos outros cursos de .NET em Programação, ou leia nossos artigos de Programação.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.