public override void VisitBlock(BlockSyntax node) { // Ein Block ist bei uns immer ein Array aus Werten var arrayExpr = new ArrayExpressionBuilder(); arrayExpr.Elements.AddRange(node.Statements.Select(ConvertToExpression)); Result = arrayExpr; }
/// <summary> /// Factory for write expression builder. /// </summary> /// <returns>IWriteExpressionBuilder implementation.</returns> protected virtual IWriteExpressionBuilder CreateArrayExpressionBuilder() { IWriteExpressionBuilder writeBuilder = null; if (this.QuSubArray) // If this is an outer array { writeBuilder = new ArrayExpressionOuterBuilder(); } else { writeBuilder = new ArrayExpressionBuilder(); } return writeBuilder; }
/// <summary> /// Factory for write expression builder. /// </summary> /// <returns>IWriteExpressionBuilder implementation.</returns> protected override IWriteExpressionBuilder CreateArrayExpressionBuilder() { IWriteExpressionBuilder writeBuilder = null; if (!this.QuSubArray) // If this is an inner array { // For some (crappy) reason, outer ArrayMarshaller can deduce its generic type, // but innermost (e.g. ArrayMarshaller<string>(Body_AddString)) needs the type specified. // Yeck. SetMethodType(this, this.paramtype.CodeType.ArrayElementType); // Override behaviour with special array expression builder for dictionary values. writeBuilder = new ArrayExpressionBuilder(); } // Ends if this is an inner array else // Else not inner array { // Just do the standard action. writeBuilder = base.CreateArrayExpressionBuilder(); } // Ends else not inner array return writeBuilder; }