1
resposta

[Projeto] Gerenciando itens no inventário

Dictionary<int, string> inventario = new Dictionary<int, string>()
        {
            { 1, "Espada Longa" },
            { 2, "Arco Curto" },
            { 3, "Escudo de Ferro" }
        };

Console.WriteLine("Itens no inventário inicial:");
foreach (var item in inventario)
{
    Console.WriteLine($"ID: {item.Key} - {item.Value}");
}
inventario.Remove(2);
inventario.Add(4, "Poção de Vida");


Console.WriteLine("Itens no inventário atualizado:");
foreach (var item in inventario)
{
    Console.WriteLine($"ID: {item.Key} - {item.Value}");
}
1 resposta

Olá, Eduardo. Como vai?

Muito bom ver você praticando com cenários de inventário de jogos! Essa é uma das melhores aplicações práticas para entender o funcionamento de coleções, e o seu código está perfeito. Você inicializou o dicionário com IDs numéricos (int) mapeados para nomes de itens (string), realizou a leitura inicial com foreach, utilizou o método Remove() para deletar uma chave específica e adicionou um novo elemento com o Add().

Para expandir o escopo do seu projeto e adicionar boas práticas de manipulação de inventários em C#, existem dois pontos muito interessantes para observar:


1. Removendo com segurança (Remove)

O método inventario.Remove(2) que você utilizou funciona perfeitamente quando temos certeza de que o ID 2 existe. No entanto, em sistemas reais, pode acontecer de o ID não existir mais (por exemplo, se o jogador já tiver descartado o item antes).

A boa notícia é que o método .Remove() do C# é inteligente: se a chave existir, ele remove e retorna true; se não existir, ele simplesmente retorna false em vez de quebrar o programa. Você pode usar esse retorno para dar um feedback para o usuário:

int idParaRemover = 5;

if (inventario.Remove(idParaRemover))
{
    Console.WriteLine($"Item com ID {idParaRemover} foi removido com sucesso!");
}
else
{
    Console.WriteLine($"Erro: O ID {idParaRemover} não foi encontrado no inventário.");
}

2. Buscando itens de forma eficiente (TryGetValue)

Imagine que o jogador queira usar uma "Poção de Vida" (ID 4). Para recuperar o nome do item com segurança sem correr o risco de buscar uma chave inexistente e gerar um erro, a estrutura recomendada no C# é o TryGetValue.

Ele combina a verificação de existência e a extração do valor em uma única operação muito rápida:

if (inventario.TryGetValue(4, out string nomeItem))
{
    Console.WriteLine($"Item encontrado: Você usou o(a) {nomeItem}!");
}
else
{
    Console.WriteLine("Item não encontrado no inventário.");
}

Essa estrutura com a palavra-chave out cria a variável nomeItem dinamicamente apenas se o ID for encontrado, economizando linhas de código e melhorando a performance.

Parabéns pela estrutura do script e continue evoluindo nas coleções do C#!

Espero que possa ter lhe ajudado!