【发布时间】:2019-03-16 11:02:47
【问题描述】:
我刚接触状态机,并尝试了使用状态机提交、审查和批准场景的过程。它在fsm.ProcessEvent(FiniteStateMachine.Events.Reviewed); 上抛出错误
即对象引用空异常。我想不通?我是否正确实施了该场景?
class Program
{
static void Main(string[] args)
{
var fsm = new FiniteStateMachine();
Console.WriteLine(fsm.State);
fsm.ProcessEvent(FiniteStateMachine.Events.Submitted);
Console.WriteLine(fsm.State);
fsm.ProcessEvent(FiniteStateMachine.Events.Reviewed);
Console.WriteLine(fsm.State);
fsm.ProcessEvent(FiniteStateMachine.Events.Approved);
Console.WriteLine(fsm.State);
Console.ReadKey();
}
class FiniteStateMachine
{
public enum States { Submitted, Reviewed, Approved};
public States State { get; set; }
public enum Events { Submitted, Reviewed, Approved};
private Action[,] fsm;
public FiniteStateMachine()
{
this.fsm = new Action[3, 3] {
//Submitted, Reviewed, TurnOff,
{this.SubmittedForReview, null, null }, //Submitted
{null, this.Reviewing, null }, //Reviewed
{null, null, this.Approving} }; //Approved
}
public void ProcessEvent(Events theEvent)
{
this.fsm[(int)this.State, (int)theEvent].Invoke();
}
private void SubmittedForReview() { this.State = States.Submitted; }
private void Reviewing() { this.State = States.Reviewed; }
private void Approving() { this.State = States.Approved; }
}
}
}
【问题讨论】:
标签: c# .net c#-4.0 action state-machine