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);
                }
            }
        }