2
respostas

[Dúvida] Erro

**Aparece os seguinte erros no log "Conversão de literal nula ou possível valor nulo em tipo não anulável" e "Possível argumento de referência nula para o parâmetro 'item' em 'void List.Add(string item)'.

Dois erros em relação ao método RegistraEntrada(). Mas não consigo entender o porque desse erro e como corrigir.**

//Sound System


string mensagemDeBoasVindas = "Boas vindas ao Screen Sound";

List<string> bandasEscolhidas = new List<string> { "U2", "The Beatles", "Calypso" };

void ExibeApresentacaoBoasVindas() {
    Console.WriteLine(@"


╔═══╗────────╔╗────╔═══╗──────────────╔═══╗──────────╔╗
║╔═╗║────╔╗─╔╝╚╗───║╔═╗║──────────────║╔═╗║──────────║║
║╚═╝╠═╦══╬╬═╩╗╔╬══╗║╚══╦══╦═╦══╦══╦═╗─║╚══╦══╦╗╔╦═╗╔═╝║
║╔══╣╔╣╔╗╠╣║═╣║║╔╗║╚══╗║╔═╣╔╣║═╣║═╣╔╗╗╚══╗║╔╗║║║║╔╗╣╔╗║
║║──║║║╚╝║║║═╣╚╣╚╝║║╚═╝║╚═╣║║║═╣║═╣║║║║╚═╝║╚╝║╚╝║║║║╚╝║
╚╝──╚╝╚══╣╠══╩═╩══╝╚═══╩══╩╝╚══╩══╩╝╚╝╚═══╩══╩══╩╝╚╩══╝
────────╔╝║
────────╚═╝
");
    Console.WriteLine(mensagemDeBoasVindas);
}

void ExibeMenu()
{
    ExibeApresentacaoBoasVindas();
    Console.WriteLine("\nDigite 1 - Para inserir uma banda");
    Console.WriteLine("Digite 2 - Para listas bandas");
    Console.WriteLine("Digite 3 - Para avaliar uma banda");
    Console.WriteLine("Digite 4 - Para ver a média de uma banda");
    Console.WriteLine("Digite -1 - Para sair");

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

    
switch (opcaoNumerica)
    {
        case 1: RegistraBanda();
            break;
        case 2: ListarBandas();
            break;
        case 3:Console.WriteLine("A opção escolhida foi " );
            break;
        case 4:
            Console.WriteLine("A opção escolhida foi ") ;
            break;
        case -1:
            Console.WriteLine("Finalizar o programa");
            break;
        default:
            Console.WriteLine("A opção é inválida ");
            break;
    }
    
}


void RegistraBanda()
{
    Console.Clear();
    Console.Write("Digite o nome da banda: ");
    string nomeDaBanda = Console.ReadLine();
    bandasEscolhidas.Add(nomeDaBanda);
    Console.WriteLine("A banda escolhida é " + nomeDaBanda);
    Thread.Sleep(2000);
    Console.Clear();
    
    ExibeMenu();
   
}

void ListarBandas()
{

    Console.WriteLine("Bandas listas:");
    for (int i = 0; i < bandasEscolhidas.Count; i++)
    {
        Console.WriteLine($"Banda: {bandasEscolhidas[i]}");
    }

    Console.WriteLine("\n Tecle para retornar ao menu inicial ");
    Console.ReadKey();
    Console.Clear();

    ExibeMenu();
}
2 respostas

Dá print no erro e coloca aqui, por favor. Assim tento te ajudar.

Os erros mencionados estão relacionados à manipulação de valores nulos em C#. Vamos endereçar cada um deles:

1. Conversão de literal nula ou possível valor nulo em tipo não anulável

Este erro ocorre quando você tenta atribuir um valor nulo, ou um valor que pode ser nulo, a uma variável que é esperada para ser sempre não nula. No seu caso, a origem provável desse erro é esta linha:

string nomeDaBanda = Console.ReadLine();

O método Console.ReadLine() pode retornar null se o fluxo de entrada for redirecionado e chegar ao fim do arquivo/stream antes de uma linha ser lida. Para corrigir isso em um contexto onde null não é esperado (e para satisfazer a análise de nulidade do C#), você pode usar o operador de coalescência nula (??) para fornecer um valor padrão caso null seja retornado:

string nomeDaBanda = Console.ReadLine() ?? string.Empty;

Dessa forma, você garante que nomeDaBanda nunca será nulo, satisfazendo as exigências de tipo não nulo do C#.

2. Possível argumento de referência nula para o parâmetro 'item' em 'void List.Add(string item)'

Esse erro é uma extensão do primeiro e ocorre porque você está tentando adicionar nomeDaBanda à lista bandasEscolhidas sem garantir antes que nomeDaBanda não é nulo:

bandasEscolhidas.Add(nomeDaBanda);

Usando a correção sugerida acima (Console.ReadLine() ?? string.Empty), você também resolverá esse segundo problema, pois garantirá que o valor passado para List.Add não seja nulo.

Conclusão

Ambos os erros estão relacionados à garantia de que os valores tratados em seu código não sejam nulos quando esperados por variáveis ou métodos que não aceitam nulos. A adoção do operador de coalescência nula (??) é uma prática comum para lidar com entradas que potencialmente podem ser nulas, garantindo a conformidade com os requisitos de tipos não anuláveis do C#.