public static void TraceNode(this BlockExpression blockExpression, StringBuilder sb, int level = 0) { if (sb == null || blockExpression == null) { return; } blockExpression.TraceBaseInfo(sb, level); var levelSpace = new string(' ', level *NumberOfSpaces); level++; if (blockExpression.Variables != null) { sb.Append($"|{levelSpace}|{Nl}"); sb.Append($"|{levelSpace}|- Variables count: {blockExpression.Variables.Count}{Nl}"); foreach (var blockExpressionVariable in blockExpression.Variables) { blockExpressionVariable.TraceNode(sb, level); } } if (blockExpression.Expressions != null) { sb.Append($"|{levelSpace}|{Nl}"); sb.Append($"|{levelSpace}|- Expressions count: {blockExpression.Expressions.Count}{Nl}"); foreach (var blockExpressionExpression in blockExpression.Expressions) { blockExpressionExpression.TraceNode(sb, level); } } }