Создание словаря с делегатами

1

Хотелось бы спросить, как сделать словарь с делегатом.

Идея такова:

  1. Имейте консольную команду, определенную как "/"
  2. используйте словарь для хранения команды и del, которые вызовут нужную мне функцию.

Что я до сих пор: мне удалось сделать то же самое, создав события

delegate void CmdHandler(string[] cmdArgs);
    class CMDReader
    {


        public event CmdHandler _Print;
        public event CmdHandler _Help;

        private char cmdChar;
     }


cmdReader._Print += new CmdHandler(Print);
void Print(string[] args)

но я ищу способ управлять им без события. Я решил, что могу сделать это со словарем, но не уверен, как это сделать.

  • 0
    Что мешает вам попробовать это со словарем?
  • 0
    в коде непонятно: что определяет, какой метод / делегат / что вызывать?
Теги:
delegates

1 ответ

2
Лучший ответ

Вы можете добавить делегатов в Dictionary, а затем использовать ключ индексатора (я только что принял название команды здесь), чтобы вызвать соответствующее действие. Однако проблема с этим шаблоном заключается в том, что на аргументы ("Все string[], с подразумеваемым знанием о значении каждого) имеется ограничение на типизацию и ограничение на общий тип возврата из всех методов (в настоящее время void).

public class CMDReader
{
    delegate void CmdHandler(string[] cmdArgs); // Or Action<string[]>

    private readonly IDictionary<string, CmdHandler> _commands;
    public CMDReader()
    {
        _commands = new Dictionary<string, CmdHandler>
        {
            {
                "Print", Print
            },
            {
                "Help", Help
            },
        };
    }

    public void InvokeCommand(string command, string[] args)
    {
        if (_commands.ContainsKey(command))
        {
            _commands[command].Invoke(args);
            // OR (_commands[command])(args);
        }
        else
        {
            Console.WriteLine("I don't know that command ...");
        }
    }

    private void Print(string[] args)
    {
      // Implementation
    }
    private void Help(string[] args)
    {
      // Implementation
    }
}
  • 0
    Спасибо чувак. это очень помогло!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню