예제 #1
0
 public static bool CompareString(string expr)
 {
     expr = expr.Replace(" ", "");
     expr = expr.Replace("()", "true").Replace(")(", ")&&(");
     string[] sa = MiMFa_StringService.GetAllWordsBetween(expr, "(", ")", true).ToArray();
     if (sa.Length > 0)
     {
         string[] sanew = new string[sa.Length];
         for (int i = 0; i < sa.Length; i++)
         {
             sanew[i] = CompareString(sa[i].Replace("(", "").Replace(")", "")).ToString();
         }
         expr = MiMFa_StringService.ReplaceWithAllByOrder(expr, sa, sanew);
     }
     expr = expr.Trim();
     expr = LikeLapSignC(expr, "<=", ">=", "<", ">");
     expr = LikeLapSignC(expr, "!==", "===", "~==", "~=", "!=", "==");
     expr = LikeLapSignC(expr, "&&", "||");
     return(MiMFa_Convert.ToBoolean(expr));
 }
예제 #2
0
        public static bool CompareString(object op1, string sign, object op2)
        {
            try
            {
                Func <object, object> normal = (o) =>
                {
                    if (!string.IsNullOrEmpty(o.ToString()))
                    {
                        return(o);
                    }
                    return(true);
                };
                op1 = normal(op1);
                op2 = normal(op2);
                double d1;
                double d2;
                bool   b1;
                bool   b2;
                switch (sign)
                {
                case "===": return(op1.Equals(op2));

                case "!==": return(!op1.Equals(op2));

                case "==":
                    return(op1.ToString() == op2.ToString());

                case "!=":
                    return(op1.ToString() != op2.ToString());

                case "~==":
                    return(op1.GetType() == op2.GetType() && MiMFa_StringService.ComparePerCent(op1.ToString(), op2.ToString()) > 70);

                case "~=":
                    return(MiMFa_StringService.ComparePerCent(op1.ToString(), op2.ToString()) > 70);

                case ">":
                    d1 = MiMFa_Convert.ForceToDouble(op1);
                    d2 = MiMFa_Convert.ForceToDouble(op2);
                    return(d1 > d2);

                case "<":
                    d1 = MiMFa_Convert.ForceToDouble(op1);
                    d2 = MiMFa_Convert.ForceToDouble(op2);
                    return(d1 < d2);

                case ">=":
                    d1 = MiMFa_Convert.ForceToDouble(op1);
                    d2 = MiMFa_Convert.ForceToDouble(op2);
                    return(d1 >= d2);

                case "<=":
                    d1 = MiMFa_Convert.ForceToDouble(op1);
                    d2 = MiMFa_Convert.ForceToDouble(op2);
                    return(d1 <= d2);

                case "&&":
                    b1 = MiMFa_Convert.ToBoolean(op1);
                    b2 = MiMFa_Convert.ToBoolean(op2);
                    return(b1 && b2);

                case "||":
                    b1 = MiMFa_Convert.ToBoolean(op1);
                    b2 = MiMFa_Convert.ToBoolean(op2);
                    return(b1 || b2);

                case "is": return(op1.GetType() == op2.GetType());
                }
                DataTable dt = new DataTable();
                return(Convert.ToBoolean(dt.Compute(op1 + sign + op2, "")));;
            }
            catch { throw new Exception("Invalid character."); }
        }