2
respostas

[Dúvida] Como acessar a List de uma Classe em um método do Program.cs?

Olá! Seguindo meus estudos de .NET com C# aqui na Alura, me deparei com um impasse que não estou conseguindo resolver. Estou desenvolvendo um pequeno programa de leitura de estoque, cadastro e consulta de produtos. Porém, encontrei uma dificuldade em acessar a List da Classe Produtos no método CadastrarProduto() e ConsultarProduto(). Eu criei um dicionário no Program.cs seguindo o projeto das aulas como modelo e acabei relacionando o Dicionário nos métodos. Alguém pode me ajudar?

Segue código:

/////////Program.cs
using System.Collections.Generic;
using classe_produto.Produtos;

Dictionary<string, Produtos> produtosSistema = new();

void CadastrarProduto()
{
    Console.Clear();
    Console.WriteLine("°* CADASTRAR PRODUTO *°");

    Console.Write("Digite o produto que quer cadastrar: ");
    string nomeProduto = Console.ReadLine()!;

    Console.Write("Digite a marca do produto: ");
    string marcaProduto = Console.ReadLine()!;

    Console.Write("Digite o preço do produto: ");
    double precoProduto = double.Parse(Console.ReadLine()!);

    Console.Write("Digite a quantidade inicial no estoque: ");
    int quantidadeInicial = int.Parse(Console.ReadLine()!);

    if (produtosSistema.ContainsKey(nomeProduto))
    {
        Console.WriteLine($"Erro! {nomeProduto} já cadastrado.");
        Thread.Sleep(4000);

        CadastrarProduto();
    }
    else
    {
        Produtos produto = new Produtos(nomeProduto, marcaProduto, precoProduto, quantidadeInicial);
        produtosSistema.Add(nomeProduto, produto);

        Console.WriteLine($"O produto {nomeProduto} foi cadastrado com sucesso!");
    }

    Console.Write("Digite uma tecla para voltar ao Menu: ");
    Console.ReadKey();
    Console.Clear();
    SistemaMenu();
}

void ConsultarProduto()
{
    Console.Clear();
    Console.WriteLine("°* CONSULTAR PRODUTO *°");
    Console.Write("Digite o nome do produto: ");
    string nomeProduto = Console.ReadLine()!;

    if (produtosSistema.ContainsKey(nomeProduto))
    {
        Produtos produtos = produtosSistema[nomeProduto];
        produtos.ExibirProdutos(produtos.Det);

        Console.Write("Digite uma tecla para voltar ao Menu: ");
        Console.ReadKey();
        Console.Clear();
    }
    else
    {
        Console.WriteLine("Produto não encontrado na lista.");
        Console.Write("Digite uma tecla para voltar ao Menu: ");
        Console.ReadKey();
        Console.Clear();
    }

    SistemaMenu();
}
//////////classe Produtos
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace classe_produto.Produtos;
class Produtos
{
    public List<Produtos> produtos = new List<Produtos>();
    public Produtos(string nome, string marca, double preco, int estoque)
    {
        Nome = nome;
        Marca = marca;
        Preco = preco;
        Estoque = estoque;
    }

    private double preco;
    private int estoque;
    private int quantidadeEstoque;
    public string Nome { get; set; }
    public string Marca { get; set; }

    public double Preco
    {
        get => preco;
        set
        {
            if (value < 0)
            {
                throw new ArgumentException("O preço deve ser positivo");
            }
            preco = value;
        }
    }
    public int Estoque
    {
        get => estoque;
        set
        {
            if (value < 0)
            {
                throw new ArgumentException("Não é possível registrar negativo");
            }
            estoque = value;
        }
    }
    public string DetalhesInfos => $"Detalhes do produto: {Nome} | {Marca} | {Preco} | {Estoque}";

    public void AdicionarProduto(Produtos produto)
    {
        produtos.Add(produto);
    }

    public void ExibirProdutos(string nomeProduto)
    {
        Console.WriteLine("Produtos em estoque: \n");
        foreach (var produto in produtos)
        {
            Console.WriteLine(produto.DetalhesInfos);
        }
    }

    public void AdicionarQuantidade(int quantidade)
    {
        quantidadeEstoque += quantidade;
    }
}
2 respostas

Olá Gabriella! Tudo bom?

Pelo que entendi, você está tentando acessar a lista de produtos dentro da classe Produtos, mas parece que há uma pequena confusão sobre como a estrutura está organizada.

No seu código, você criou uma lista de produtos dentro da classe Produtos, mas essa lista não está sendo utilizada na lógica do seu programa. Em vez disso, você está usando um dicionário no Program.cs para armazenar os produtos. Isso é uma abordagem válida, mas a lista dentro da classe Produtos não está sendo utilizada de forma eficaz.

Se o seu objetivo é manter uma lista de produtos, você pode seguir uma das duas abordagens:

  1. Usar o Dicionário no Program.cs: Continue usando o dicionário produtosSistema no Program.cs para gerenciar seus produtos, como você já está fazendo. Nesse caso, a lista dentro da classe Produtos não é necessária.

  2. Usar a Lista dentro da Classe Produtos: Se você quiser usar a lista dentro da classe Produtos, você pode modificar seu código para gerenciar os produtos diretamente nessa lista. Porém você precisará reestruturação do seu código.

Para manter a simplicidade e seguir a estrutura que você já tem, sugiro continuar usando o dicionário no Program.cs. Aqui está uma pequena correção no método ConsultarProduto para exibir corretamente os detalhes do produto:

void ConsultarProduto()
{
    Console.Clear();
    Console.WriteLine("°* CONSULTAR PRODUTO *°");
    Console.Write("Digite o nome do produto: ");
    string nomeProduto = Console.ReadLine()!;

    if (produtosSistema.ContainsKey(nomeProduto))
    {
        Produtos produto = produtosSistema[nomeProduto];
        Console.WriteLine(produto.DetalhesInfos);

        Console.Write("Digite uma tecla para voltar ao Menu: ");
        Console.ReadKey();
        Console.Clear();
    }
    else
    {
        Console.WriteLine("Produto não encontrado na lista.");
        Console.Write("Digite uma tecla para voltar ao Menu: ");
        Console.ReadKey();
        Console.Clear();
    }

    SistemaMenu();
}

Com essa alteração, o método ConsultarProduto deve exibir corretamente os detalhes do produto consultado.

Espero ter ajudado e bons estudos!

Oi André, tudo bem?

Muitissimo obrigada pelo seu auxilio e orientação! Passando para informar que deu certo a correção.