Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

[Projeto] Faça como eu fiz: agenda com controle de contatos duplicados

Classe Program:

Agenda agenda = new("Marina Souza");
agenda.AdicionarContato(new Contato("Carlos", "11998887777"));
agenda.AdicionarContato(new Contato("Carlos", "11991112222")); 
agenda.AdicionarContato(new Contato("Julia", "21988776655"));
agenda.ListarContatos();

Classe Agenda:

namespace Encapsulamento;

internal class Agenda(string proprietario)
{
    private readonly List<Contato> contatos = [];

    public string Proprietario { get; set; } = proprietario;
    public int QuantidadeContatos => contatos.Count;

    public bool AdicionarContato(Contato contato)
    {
        if (!contatos.Any(c => c.Nome == contato.Nome))
        {
            contatos.Add(contato);
            return true;
        }
        else
        {
            Console.WriteLine("Contato com esse nome já está na agenda.");
            return false;
        }
    }

    public void ListarContatos()
    {
        Console.WriteLine($"Agenda de: {Proprietario}");
        Console.WriteLine("Contatos:");
        foreach (Contato contato in contatos)
        {
            Console.WriteLine($"- {contato.Nome} | {contato.Telefone}");
        }

        Console.WriteLine($"Total de contatos: {QuantidadeContatos}");
    }
}

Classe Contato:

namespace Encapsulamento;

internal class Contato(string nome, string telefone)
{
    public string Nome { get; set; } = nome;
    public string Telefone { get; set; } = telefone;
}
1 resposta
solução!

Olá, Fabiano! Como vai?

Gostei da forma como você aplicou o encapsulamento e utilizou o método Any() para impedir contatos duplicados na agenda. Também ficou interessante o uso da propriedade somente leitura QuantidadeContatos, que mantém a contagem sempre sincronizada com a lista de contatos. Sua solução está organizada e atende bem ao objetivo da atividade.

Uma dica interessante para o futuro é utilizar uma comparação sem diferenciar letras maiúsculas e minúsculas ao validar nomes. Assim, "Carlos" e "carlos" também seriam considerados duplicados. Veja este exemplo:

<pre><code>
bool existe = contatos.Any(c => c.Nome.ToLower() == contato.Nome.ToLower());
Console.WriteLine(existe);
</code></pre>

Nesse exemplo, o código converte os nomes para minúsculas antes da comparação, evitando cadastros duplicados com diferenças apenas na capitalização.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!