Olá, pessoal!
Eu optei por organizar o código antes de seguir as aulas. Dessa forma ele fica mais fácil de ler, usar e a refatoração serve como prática dos conceitos já aprendidos até aqui! O que fiz:
- Separei a lógica de seleção de banda na função "EscolherBanda()";
- Separei a lógica de pedir qualquer tecla antes de continuar na função "AguardarQualquerTecla()";
- Coloquei o "Console.Clear()" antes de cada chamada à função "ExibirTituloDaOpcao()" dentro da função, removendo todas as demais chamadas; e
- Coloquei o "Console.Clear()" antes de cada chamada à "ExibirOpcoesDoMenu()" dentro da própria, removendo as duplicatas.
Depois aproveitei para refatorar a "EscolherBanda()" para listar todas as bandas e pedir pro usuário selecionar uma usando um número. Essas funções ficaram assim:
Banda? EscolherBanda()
{
if (bandasRegistradas.Count == 0)
{
Console.WriteLine("Não há nenhuma banda registrada ainda.");
return null;
}
else if (bandasRegistradas.Count == 1)
{
var banda = bandasRegistradas[bandasRegistradas.Keys.First()];
Console.WriteLine($"Selecionada a banda {banda.Nome}");
return banda;
}
Console.WriteLine("Bandas registradas:");
var bandasRegistradasKeys = bandasRegistradas.Keys.ToList();
for (int i = 0; i < bandasRegistradasKeys.Count; i++)
{
var key = bandasRegistradasKeys[i];
Console.WriteLine($"\t {i+1}) {key}");
}
Console.Write($"\nEscolha uma banda (1-{bandasRegistradasKeys.Count}): ");
int bandaEscolhida = int.Parse(Console.ReadLine()!) - 1;
if (bandaEscolhida < 0 || bandaEscolhida >= bandasRegistradasKeys.Count)
{
Console.WriteLine("Opção inválida.");
return null;
}
return bandasRegistradas[bandasRegistradasKeys[bandaEscolhida]];
}
void AguardarQualquerTecla()
{
Console.WriteLine("\nDigite uma tecla para voltar ao menu principal...");
Console.ReadKey();
}
E um exemplo de uso delas:
void AvaliarUmaBanda()
{
ExibirTituloDaOpcao("Avaliar banda");
var banda = EscolherBanda();
if (banda is not null)
{
Console.Write($"Qual a nota que a banda {banda.Nome} merece: ");
int nota = int.Parse(Console.ReadLine()!);
banda.AdicionarNota(nota);
Console.WriteLine($"\nA nota {nota} foi registrada com sucesso para a banda {banda.Nome}");
}
AguardarQualquerTecla();
ExibirOpcoesDoMenu();
}