Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Relacionamentos entre as classes?

Parei em um seguinte erro estou tentando exibir as informações da classe Genero no metodo que exibe o albun da musica e gera o seguinte erro:

using System.Threading.Channels;

class Album 
{
    private List<Musica> musicas = new List<Musica>(); // campo privado
    public string Nome { get; set; }
    public int DuracaoTotal  => musicas.Sum(m => m.Duracao); // soma a duração de tempo de cada musica
    public Genero Genero { get; set; }

    public void AdicionarMusicas(Musica musica)
    {

        musicas.Add(musica);

    }

    public void ExibirMusicasDoAlbum()
    {
        Console.WriteLine($"Nome do Album: {Nome} \n");
        foreach (var musica in musicas)
        {
            Console.WriteLine($"Nome do Musica: {musica.Nome}");
        }
        Console.WriteLine($"A duração total do Album e de: {DuracaoTotal} segundos.");
        Console.WriteLine($"{Genero.GeneroMusical}");
    }   

}
class Genero
{
   
    public string GeneroMusical {  get; set; }

   // public string TipoGenero { get; set; } //=> "Gospel";
  //  public string GeneroDaMusica { get; set; } // => $"O genero Musical dessa Musica e {TipoGenero}";

}

      

  /*  public void ExibeGeneroMusical()
    {
        Console.WriteLine($"O genero dessa musica e {GeneroDaMusica}");
    }

} */

class Musica
{    // atributos a classe
    public string Nome {  get; set; } // usamos o get para informar e o set para atribuir valor a algo
    public string Artista { get; set; }
    public int Duracao { get; set; }
    public bool Disponivel { get;  set; } // propriedades operação de leitura e escrita
  //  public Genero Genero { get; set; }
    public string DescricaoArtista => $"A música {Nome} pertence a banda {Artista}.";//para cada musica tem uma duração // função lambda

   
    public void ExibeFichaTecnica()
    {
        Console.WriteLine(DescricaoArtista);
        Console.WriteLine($"Nome da Música: {Nome}");
        Console.WriteLine($"Artista da Música: {Artista}");
        Console.WriteLine($"Duração da Música: {Duracao}");
        if (Disponivel)
        {
            Console.WriteLine("Disponivel no Plano");
        }
        else
        {
            Console.WriteLine("Só disponivel no plano plus+");

        }
        Console.WriteLine("**************************************************");
    }
}

  
Genero genero = new Genero 
{
    GeneroMusical = "Gospel",
};




Album albumArautos = new Album();
albumArautos.Nome = "Tudo Novo";


Musica musica1 = new Musica();
musica1.Nome = "Começando aqui";
musica1.Duracao = 220;

Musica musica2 = new Musica();
musica2.Nome = "Vaso Novo";
musica2.Duracao = 300;

// adiciona musicas ao album 
albumArautos.AdicionarMusicas(musica1);
albumArautos.AdicionarMusicas(musica2);

// exibe musicas ao album
albumArautos.ExibirMusicasDoAlbum();



//Console.WriteLine($"{gen.TipoGenero}");


//gen.ExibeGeneroMusical();

Mandei o codigo por completo pois nao estou entendendo o porque esta dando esse erro de exceção.

2 respostas
solução!

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Olá, Levi! Como vai?

O problema está quando você tenta acessar Genero.GeneroMusical, a propriedade Genero é nula, o que gera uma exceção.

Para resolver isso, você deve garantir que a propriedade Genero do álbum seja inicializada antes de chamar o método ExibirMusicasDoAlbum. Aqui está como você pode fazer isso:

  1. Inicialize a propriedade Genero da classe Album ao criar a instância do álbum.

    Album albumArautos = new Album();
    albumArautos.Nome = "Tudo Novo";
    albumArautos.Genero = genero; // Adicione esta linha para inicializar a propriedade Genero
    
  2. Certifique-se de que a classe Genero está corretamente definida e inicializada.

    Aqui está o código atualizado com a inicialização da propriedade Genero:

    Genero genero = new Genero 
    {
        GeneroMusical = "Gospel",
    };
    
    Album albumArautos = new Album();
    albumArautos.Nome = "Tudo Novo";
    albumArautos.Genero = genero; // Inicialize a propriedade Genero
    
    Musica musica1 = new Musica();
    musica1.Nome = "Começando aqui";
    musica1.Duracao = 220;
    
    Musica musica2 = new Musica();
    musica2.Nome = "Vaso Novo";
    musica2.Duracao = 300;
    
    // adiciona musicas ao album 
    albumArautos.AdicionarMusicas(musica1);
    albumArautos.AdicionarMusicas(musica2);
    
    // exibe musicas ao album
    albumArautos.ExibirMusicasDoAlbum();
    

Com essa modificação, a propriedade Genero do álbum será inicializada com uma instância válida antes de ser acessada no método ExibirMusicasDoAlbum, evitando assim a exceção.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.