/// <summary> /// Executes the transition action. /// </summary> /// <param name="arguments">The state machine event arguments.</param> public void Execute(object[] arguments) { Ensure.ArgumentNotNull(arguments, "arguments"); if (arguments.Length != 1) { throw new ArgumentException(ExceptionMessages.CannotPassMultipleArgumentsToSingleArgumentAction(arguments, this.Describe())); } if (!typeof(T).IsAssignableFrom(arguments[0].GetType())) { throw new ArgumentException(ExceptionMessages.CannotCastArgumentToActionArgument(arguments[0], this.Describe())); } var argument = (T)arguments[0]; this.action(argument); }