Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Não entendi essa parte do IEnumerable

Primeiro, como o IEnumerable vai impedir os métodos da Lista de serem acessados, se o IEnumerable ainda está recebendo um get set do tipo Lista?

Segundo, o código apresentado pelo instrutor é esse:

internal class Banda
{
    private List<Avaliacao> notas = new List<Avaliacao>();

// código omitido

public IEnumerable<Album> Albuns => albuns;	
}

Ao que da a entender, apagaram a linha que instanciava uma lista, a private List<Album> albuns = new List<Album>();, mas se eu realmente fizer isso, da erro, pois como eu disse, o IEnumerable ainda tem que receber uma lista no => albuns;, então não tem como eu apagar essa linha.

1 resposta
solução!

Boa noite, Felipe. Estou respondendo como um colega que passou por essa aula hoje mesmo e também ficou confuso, então foi pesquisar! Pelo que eu entendi, o IEnumerable "mascara" o tipo. Ele consegue conectar o IEnumerable com o private List, mas como o Album mesmo está "escondido", ninguém consegue mexer nele, a não ser pela função AdicionarAlbum(Album album). E, não, o private List não é apagado, não. Ele continua lá. O que é apagado é a outra linha que aparece List. O meu código ficou assim:

namespace ScreenSound.Modelos;

internal class Banda : IAvaliavel
{
    private List<Album> albuns = new List<Album>();
    private List<Avaliacao> notas = new List<Avaliacao>();

    public Banda(string nome)
    {
        Nome = nome;
    }

    public string Nome { get; }
    public double Media
    {
        get
        {
            if (notas.Count == 0) return 0;
            else return notas.Average(a => a.Nota);
        }
    }
    public IEnumerable<Album> Albuns => albuns;

    public void AdicionarAlbum(Album album) 
    { 
        albuns.Add(album);
    }

    public void AdicionarNota(Avaliacao nota)
    {
        notas.Add(nota);
    }

    public void ExibirDiscografia()
    {
        Console.WriteLine($"Discografia da banda {Nome}");
        foreach (Album album in albuns)
        {
            Console.WriteLine($"Álbum: {album.Nome} ({album.DuracaoTotal})");
        }
    }
}
Espero ter te ajudado, nem que seja um pouquinho!