3
respostas

[Dúvida] Maiusculas e Minusculas nas bandas

Estou fazendo o prejeto do Screen Sound e quando adiciono uma banda como por exemplo Red Hot quando eu vou pesquisar essa banda eu só consigo encontra-la quando escrevo da mesma forma que adicionei: Red Hot, se eu colocar red hot com minuscula ele simplesmente não encontro e diz que a banda não foi encontrada.

Pesquisei no chatGPT e no proprio site da Microsoft e encontrei essa propriedade: StringComparer OrdinalIgnoreCase, porém não sei onde inclui-la no meu projeto, já tentei de várias formas e só da erro.

3 respostas

Olá, tudo bem?

Poderia compartilhar seu código para dar uma analisada?

string mensagemDeBoasVindas = "Boas Vindas ao Screen Sound";

Dictionary<string, List> bandasRegistradas = new Dictionary<string, List>(); bandasRegistradas.Add("Red Hot", new List { 10, 8, 6 }); bandasRegistradas.Add("The Beatles", new List());

void ExibirLogo() { Console.WriteLine(@" "); Console.WriteLine(mensagemDeBoasVindas); } void ExibirOpcoesDoMenu() { ExibirLogo(); Console.WriteLine("Digite 1 para registrar uma banda"); Console.WriteLine("Digite 2 para mostrar todas as bandas"); Console.WriteLine("Digite 3 para avaliar uma banda"); Console.WriteLine("Digite 4 para exibir a média de uma banda"); Console.WriteLine("Digite -1 para sair");

        Console.Write("\nDigite a sua opção: ");
        string opcaoEscolhida = Console.ReadLine()!;
        int opcaoEscolhidaNumerica = int.Parse(opcaoEscolhida);

        switch (opcaoEscolhidaNumerica)
        {
            case 1:RegistrarBandas();
                break;
            case 2:ExibirBandas();
                break;
            case 3:AvaliarUmaBanda();
                break;
            case 4:ExibirMedia();
                break;
            case -1:
                Console.WriteLine("Você escolheu a opção " + opcaoEscolhidaNumerica);
                break;
            default:
                Console.WriteLine("Opção inválida");
                break;
        }
    }

void RegistrarBandas() { Console.Clear(); ExibirTituloDaOpcao("Registro das bandas"); Console.Write("Digite o nom eda banda que deseja registrar: "); string nomeDaBanda = Console.ReadLine()!; bandasRegistradas.Add(nomeDaBanda, new List()); Console.WriteLine($"A banda {nomeDaBanda} foi registrada com sucesso"); Thread.Sleep(2000); Console.Clear(); ExibirOpcoesDoMenu(); } void ExibirBandas() { Console.Clear(); ExibirTituloDaOpcao("Exibindo todas as bandas registradas na nossa aplicação"); foreach (string banda in bandasRegistradas.Keys) { Console.WriteLine($"Banda: {banda}"); } Console.WriteLine("\nDigite uma tecla para voltar ao menu principal"); Console.ReadKey(); Console.Clear(); ExibirOpcoesDoMenu(); } void ExibirTituloDaOpcao(string titulo) { int quantidadeDeLetras = titulo.Length; string asteriscos = string.Empty.PadLeft(quantidadeDeLetras, '*'); Console.WriteLine(asteriscos); Console.WriteLine(titulo); Console.WriteLine(asteriscos + "\n"); } void AvaliarUmaBanda() { Console.Clear(); ExibirTituloDaOpcao("Avaliar banda"); Console.Write("Digite o nome da banda que deseja avaliar: "); string nomeDaBanda = Console.ReadLine()!; if (bandasRegistradas.ContainsKey(nomeDaBanda)) { Console.Write($"Qual nota que a banda {nomeDaBanda} merece: "); int nota = int.Parse(Console.ReadLine()!); bandasRegistradas[nomeDaBanda].Add(nota); Console.WriteLine($"\nA nota {nota} foi registrada com sucesso"); Thread.Sleep(2000); Console.Clear(); ExibirOpcoesDoMenu(); } else { Console.WriteLine($"\nA banda {nomeDaBanda} não foi encontrada"); Console.WriteLine("Digite uma tecla para voltar ao menu principal"); Console.ReadKey(); Console.Clear(); ExibirOpcoesDoMenu(); } } void ExibirMedia() { Console.Clear(); ExibirTituloDaOpcao("Exibir média da banda"); Console.Write("\nDigite o nome da banda que deseja exibir a média: "); string nomeDaBanda = Console.ReadLine()!; if (bandasRegistradas.ContainsKey(nomeDaBanda)) { List notasDasBandas = bandasRegistradas[nomeDaBanda]; Console.Write($"\nA média da banda {nomeDaBanda} é {notasDasBandas.Average()}."); Console.WriteLine("\nDigite ema tecla para voltar ao menu principal"); Console.ReadKey(); Console.Clear(); ExibirOpcoesDoMenu(); } else { Console.WriteLine($"\nA banda {nomeDaBanda} não foi encontrada"); Console.WriteLine("Digite uma tecla para voltar ao menu principal"); Console.ReadKey(); Console.Clear(); ExibirOpcoesDoMenu(); } } ExibirOpcoesDoMenu();

Olá Thaís, como vai??

Para resolver este problema basta modificar esta linha:

Dictionary<string, List> bandasRegistradas = new Dictionary<string, List>();

Por esta:

Dictionary<string, List<int>> bandasRegistradas = new(StringComparer.OrdinalIgnoreCase);

Explicação: ` Dictionary<string, List>.Dictionary(IEqualityComparer? comparer)

O dicionario nos permite definir um comparador como argumento, assim podemos dizer a ele a forma que gostariamos de comparar as chaves e valores.`

Uso de StringComparer.OrdinalIgnoreCase:

StringComparer.OrdinalIgnoreCase é um comparador que ignora a diferença entre maiúsculas e minúsculas ao comparar strings. Ao usar esse comparador na criação do Dictionary como argumento, garante-se que as operações de comparação de chave (como ContainsKey) ignorem a diferença de case. Isso significa que bandasRegistradas["Red Hot"] será tratado da mesma forma que bandasRegistradas["red hot"].

Uso de Tipagem Específica para List:

No código original, List não especifica o tipo de elementos que ele contém. Em C#, usar lista genérica List<T> requer um argumento de tipo, onde T é o tipo de elementos na lista. No seu caso, você está armazenando notas, que são inteiros. Portanto, use List<int> para especificar que a lista conterá elementos do tipo int.

Com essas alterações você melhora a usabilidade da aplicação, resolvendo o problema ao buscar pelas bandas. Espero ter ajudado e bons estudos!!