Я новичок в этом, так что простите меня. Я создал меню, так что если я введу 1, программа выполнит этот набор кода для 1 и так далее. Я не уверен, как «переместить» созданный мной словарь после ввода варианта 1 в вариант 2. Помощь будет принята с благодарностью.

using System;
using System.Collections.Generic;`
using System.Linq;

namespace PokemonPocket
{
    class Program
    {
        static void Main(string[] args)
        {
            //PokemonMaster list for checking pokemon evolution availability.    
            List<PokemonMaster> pokemonMasters = new List<PokemonMaster>(){
            new PokemonMaster("Pikachu", 2, "Raichu"),
            new PokemonMaster("Eevee", 3, "Flareon"),
            new PokemonMaster("Charmander", 1, "Charmeleon")
            };
            // Use "Environment.Exit(0);" if you want to implement an exit of the console program
            PokemonMenu();
        }
        static void PokemonMenu()
        {   //Part 1 - Creating the menu for user input
            Console.WriteLine("Welcome to Pokemon Pocket App!");
            Console.WriteLine("(1). Add Pokemon to my pocket");
            Console.WriteLine("(2). List Pokemon(s) in my pocket");
            Console.WriteLine("(3). Check if I can evolve Pokemon");
            Console.WriteLine("(4). Evolve Pokemon\n");
            Console.Write("Please only enter [1,2,3,4] or Q to exit:");
            char menu = Convert.ToChar(Console.ReadLine());
            if (menu == '1'){
                Dictionary<string, string> myDictionary = new Dictionary<string, string>();
                myDictionary.Add("FirstName", "John");
                myDictionary.Add("LastName", "Walter");
                PokemonMenu();


            }
             if (menu == '2') {
                 foreach (var v in myDictionary)
                     Console.WriteLine(string.Format("{0}: {1}", v.Key, v.Value));
                     PokemonMenu();
             }
            if (menu == 'Q'){
                Console.WriteLine("App exited!");
                Environment.Exit(0);
    }
}
c#
0
user15982865 20 Май 2021 в 17:35

2 ответа

Лучший ответ

Я предлагаю использовать loop вместо рекурсии (т.е. вызывая PokemonMenu() внутри себя):

static void PokemonMenu() {
  // From now on myDictionary is available for any menu option 
  var myDictionary = new Dictionary<string, string>();
      
  while (true) { // <- loop until exit option (key 'Q') is pressed
    Console.WriteLine("Welcome to Pokemon Pocket App!");
    Console.WriteLine("(1). Add Pokemon to my pocket");
    Console.WriteLine("(2). List Pokemon(s) in my pocket");
    Console.WriteLine("(3). Check if I can evolve Pokemon");
    Console.WriteLine("(4). Evolve Pokemon\n");
    Console.Write("Please only enter [1,2,3,4] or Q to exit:");

    char menu = Convert.ToChar(Console.ReadLine());

    if (menu == '1') {
      // We, probably, want to add just once
      if (myDictionary.Count <= 0) { 
        myDictionary.Add("FirstName", "John");
        myDictionary.Add("LastName", "Walter");
      }
      else
        Console.WriteLine($"You have {myDictionary.Count} in your pocket.");
    }
    else if (menu == '2') 
      foreach (var v in myDictionary)
        Console.WriteLine(string.Format("{0}: {1}", v.Key, v.Value));
    else if (menu == 'Q') {
      Console.WriteLine("App exited!");

      break;
    }
  }
}
0
Dmitry Bychenko 20 Май 2021 в 14:48

Потому что ваш "myDictionary" определен в области if (menu == '1'). Вы перемещаете оператор if. Также вы должны изменить "myDictionary" как глобальную переменную.

class Program
{
    //Global Variable
    static Dictionary<string, string> myDictionary = new Dictionary<string, string>();

    static void Main(string[] args)
    {
        //PokemonMaster list for checking pokemon evolution availability.    
        //List<PokemonMaster> pokemonMasters = new List<PokemonMaster>(){
        //new PokemonMaster("Pikachu", 2, "Raichu"),
        //new PokemonMaster("Eevee", 3, "Flareon"),
        //new PokemonMaster("Charmander", 1, "Charmeleon")
        //};
        // Use "Environment.Exit(0);" if you want to implement an exit of the console program
        PokemonMenu();
    }
    static void PokemonMenu()
    {   //Part 1 - Creating the menu for user input
        Console.WriteLine("Welcome to Pokemon Pocket App!");
        Console.WriteLine("(1). Add Pokemon to my pocket");
        Console.WriteLine("(2). List Pokemon(s) in my pocket");
        Console.WriteLine("(3). Check if I can evolve Pokemon");
        Console.WriteLine("(4). Evolve Pokemon\n");
        Console.Write("Please only enter [1,2,3,4] or Q to exit:");
        char menu = Convert.ToChar(Console.ReadLine());

        //You can't define here because ever PokemonMenu() call will create new empty dictionary. 
        //Dictionary<string, string> myDictionary = new Dictionary<string, string>();

        if (menu == '1')
        {
            //This is under if statmenet/ if scope so only you can reach in this scope {}.
            //Dictionary<string, string> myDictionary = new Dictionary<string, string>();
            myDictionary.Add("FirstName", "John");
            myDictionary.Add("LastName", "Walter");
            PokemonMenu();
        }
        if (menu == '2')
        {
            foreach (var v in myDictionary)
                Console.WriteLine(string.Format("{0}: {1}", v.Key, v.Value));
            PokemonMenu();
        }
        if (menu == 'Q')
        {
            Console.WriteLine("App exited!");
            Environment.Exit(0);
        }
    }
0
Denis 20 Май 2021 в 15:01