Вы можете использовать
Dictionary<states, Dictionary<stateFunctions, Action>> Lookup = new Dictionary<states, Dictionary<stateFunctions, Action>>();
, чтобы вы могли искать и выполнять, например,
// First Key finds the inner dictionary
// Second key finds the action in the inner dictionary
// ? makes sure you don't get NullReferenceExceptions (just in case)
// Invoke() finally executed the stored action
Lookup[states.enter][stateFunctions.attack]?.Invoke();
Будьте осторожны при заполнении: Обязательно инициализируйте внутренние Dictionary
(s) перед добавлением к ним элементов, например,
Lookup[states.enter] = new Dictionary<stateFunctions, Action>();
Lookup[states.enter][stateFunctions.attack] = Attacking_Enter;
Или инициализируйте их все в одном go например, например
private void Initialize ()
{
Lookup = new Dictionary<states, Dictionary<stateFunctions, Action>>
{
{states.enter, new Dictionary<stateFunctions, Action>
{
{stateFunctions.attack, Attacking_Enter},
...
}
},
...
}
}