你可以用一个
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;
或者像这样一次性初始化它们
private void Initialize ()
{
Lookup = new Dictionary<states, Dictionary<stateFunctions, Action>>
{
{states.enter, new Dictionary<stateFunctions, Action>
{
{stateFunctions.attack, Attacking_Enter},
...
}
},
...
}
}