示例#1
0
 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);
 }