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!