I am just new to state machines and tried my hands on the process of Submit, Review and Approved scenario using state machines. It throws error on     fsm.ProcessEvent(FiniteStateMachine.Events.Reviewed);
i.e. object reference null exception. I cannot figure out? Am I implementing the scenario correctly?
    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; }
        }
    }
}
 
     
    