Я List<KeyValuePair<KeyEnum, Delegate>
подписать делегатов на событие в List<KeyValuePair<KeyEnum, Delegate>
Цель состоит в том, чтобы связать ряд обработчиков с клавишами клавиатуры и именованными осями, которые представлены в Enums
Диспетчеризация довольно проста, я просто перебираю список KVP, проверяю условие и, если условие выполняется, просто member.Value;
делегата с member.Value;
Я не сталкивался с какими-либо проблемами, связанными с эффективностью процессорного времени, и обнаружил, что в стеке он значительно чище.
Проблема добавления в делегаты после создания экземпляра. Попытка получить к нему доступ с помощью collection.FirstOrDefault(n=>n.Key == KeyEnum.W).Value+= SomeMethod
не работает, так как Value
collection.FirstOrDefault(n=>n.Key == KeyEnum.W).Value+= SomeMethod
только для чтения.
Есть ли способ сделать это, который не требует создания новой KeyValuePair
каждый раз, или лучшее решение, чем KeyValuePair
в целом
Просто используйте Dictionary<KeyEnum, Action>
. Я не понимаю, зачем вам нужен последовательный доступ к KVP. Вы также должны указать тип делегата, соответствующий обработчикам событий, если можете. Action
или EventHandler
или Action<Something>
зависимости от ваших потребностей.
Тогда вы можете легко добавить и вызвать делегатов:
// adding delegates
if (dictionary.ContainsKey(KeyEnum.W)) {
dictionary[KeyEnum.W] += SomeMethod;
} else {
dictionary.Add(KeyEnum.W, SomeMethod);
}
// calling delegates
if (dictionary.ContainsKey(KeyEnum.W)) {
dictionary[KeyEnum.W](...);
}
Dictionary
?