public virtual void VisitArrayIndexExpression <TExpression, TArgument>(
     IArrayIndexExpression <TExpression, TArgument> arrayIndexExpression)
     where TExpression : IExpression
     where TArgument : IArgument
 {
     Visit(arrayIndexExpression);
 }
 public override void VisitArrayIndexExpression <TExpression, TArgument>(
     IArrayIndexExpression <TExpression, TArgument> arrayIndexExpression)
 {
     Steps.Add(new WriteExpression <TExpression>(arrayIndexExpression.Array));
     Steps.Add(new WriteStartBracket());
     Steps.AddCommaSeparatedExpressionSteps(arrayIndexExpression.Indexes);
     Steps.Add(new WriteEndBracket());
 }
 public override void VisitArrayIndexExpression <TExpression, TArgument>(
     IArrayIndexExpression <TExpression, TArgument> arrayIndexExpression)
 {
     Value = new Expression()
     {
         ArrayIndexExpression = new ArrayIndexExpressionFactory(arrayIndexExpression).Value
     };
 }
 public static void VisitArrayIndexExpressionChildren<TExpression, TArgument>(
     IArrayIndexExpression<TExpression, TArgument> arrayIndexExpression,
     IGenericExpressionVisitor visitor)
     where TExpression : IExpression
     where TArgument : IArgument
 {
     VisitIfNotNull(arrayIndexExpression.Array, visitor);
     VisitCollection(arrayIndexExpression.Indexes, visitor);
 }