Adicionei uma verificação antes de adicionar um filme a lista de atuações do artista.. e também fiz uma verificação antes de adicionar um artista ao elenco.
Artista.cs
using System.Text;
namespace Alura.Filmes;
public class Artista(string nome, DateTime nascimento, List<Filme>? filmesAtuados)
{
public Artista(string nome, DateTime nascimento) : this(nome, nascimento, null) { }
public string Nome { get; set; } = nome;
public int Idade
{
get
{
var hoje = DateTime.Today;
var idade = hoje.Year - nascimento.Year;
if (nascimento.Date > hoje.AddYears(-idade))
idade--;
return idade;
}
}
public List<Filme> FilmesAtuados = filmesAtuados ?? [];
public void AdicionarFilme(Filme filme)
{
if (filme is null)
{
Console.WriteLine("ERRO: Não é possível adicionar um filme nulo.");
return;
}
if (FilmesAtuados.Any(f => f.Titulo.Equals(filme.Titulo, StringComparison.OrdinalIgnoreCase)))
{
Console.WriteLine($"ERRO - O filme '{filme.Titulo}' já existe na lista de filmes atuados de {Nome}.");
return;
}
FilmesAtuados.Add(filme);
if (!filme.Elenco.Contains(this))
filme.AdicionarElenco(this);
Console.WriteLine($"Filme '{filme.Titulo}' adicionado a lista de atuações do artista {Nome}!");
}
public void ExibirDetalhes()
{
StringBuilder sb = new();
sb.AppendLine($"\nNome: {Nome}");
sb.AppendLine($"Idade: {Idade}");
sb.AppendLine($"Número de atuações: {FilmesAtuados.Count}");
if (FilmesAtuados.Count > 0)
{
sb.AppendLine("---- Filmes ----");
foreach (var filme in FilmesAtuados)
{
sb.AppendLine($"{filme.Titulo}({filme.Ano}) - Duração: {filme.Duracao}min");
}
}
Console.Write(sb.ToString());
}
}
Filme.cs
using System.Text;
namespace Alura.Filmes;
public class Filme(string titulo, int duracao, int ano)
{
public Filme(string titulo, int duracao, int ano, List<Artista>? elenco) : this(titulo, duracao, ano)
{
Elenco = elenco ?? [];
}
public string Titulo { get; set; } = titulo;
public int Duracao { get; set; } = duracao;
public int Ano { get; set; } = ano;
public List<Artista> Elenco { get; set; } = [];
public void ExibirDetalhes()
{
StringBuilder sb = new();
sb.AppendLine($"\nFilme: {Titulo}");
sb.AppendLine($"Duração: {Duracao}");
sb.AppendLine($"Elenco: {string.Join(", ", Elenco.Select(a => a.Nome))}");
Console.WriteLine(sb.ToString());
}
public void AdicionarElenco(Artista artista)
{
if (Elenco.Any(a => a.Nome.Equals(artista.Nome, StringComparison.OrdinalIgnoreCase)))
{
Console.WriteLine($"ERRO - O Artista '{artista.Nome}' já existe na lista do elenco.");
return;
}
Elenco.Add(artista);
if (!artista.FilmesAtuados.Contains(this))
artista.AdicionarFilme(this);
Console.WriteLine($"Artista '{artista.Nome}' adicionado ao elenco de {Titulo}");
}
}
Program.cs
Artista a1 = new("Ryan Reynolds", new(1976,10,23));
Artista a2 = new("Hugh Jackman", new(1968,10,12));
Filme f1 = new("Deadpool & Wolverine", 127, 2024);
a1.ExibirDetalhes();
f1.ExibirDetalhes();
a1.AdicionarFilme(f1);
a1.ExibirDetalhes();
f1.ExibirDetalhes();
f1.AdicionarElenco(a2);
f1.ExibirDetalhes();