public string BuildFormula(bool useSpace = false) { if (!Operation.IsEmpty()) // если нет оператора то формула имеет вид x1 - всё ок { var v = useSpace ? " " : ""; if (Operation == ",") { Formula = Left.BuildFormula(useSpace) + v + "," + v + Right.BuildFormula(useSpace); } else if (Operation == "f") { Formula = Left.Formula + "(" + v + Right.BuildFormula(useSpace) + v + ")"; } else { var lf = Left.BuildFormula(useSpace); var rf = Right.BuildFormula(useSpace); if (new[] { "<>", "<=", ">=", "!=", "<", ">", "=", "*", "/", "^" }.Contains(Operation)) { if (Left.Operation == "-" || Left.Operation == "+") { lf = "(" + v + lf + v + ")"; } if (Right.Operation == "-" || Right.Operation == "+" || (Operation == "/" && !Right.Operation.IsEmpty())) { rf = "(" + v + rf + v + ")"; } } if (new[] { "&&", "&", "||", "|" }.Contains(Operation)) { if (new[] { "<>", "<=", ">=", "!=", "<", ">", "=" }.Contains(Left.Operation)) { lf = "(" + v + lf + v + ")"; } if (new[] { "<>", "<=", ">=", "!=", "<", ">", "=" }.Contains(Right.Operation)) { rf = "(" + v + rf + v + ")"; } } Formula = lf + v + Operation + v + rf; } } return(Formula); }