2011-04-30 8 views
10

¿Existe alguna manera fácil de evaluar cadenas como "(4+8)*2" para que obtenga el valor int de 24?Evalúe la cadena C# con los operadores matemáticos

¿O hay mucho trabajo para hacer esto ...?

+1

Puede echar un vistazo a: [La expresión evaluador revisited (función Eval en el 100% .NET administrado)] (http://www.codeproject.com/KB/recipes/eval3.aspx) –

Respuesta

31

Otra persona añadido este y luego se borraron. Pensé que era genial porque no se necesitan bibliotecas de terceros.

class Program 
    { 

     static void Main(string[] args) 
     { 
      Console.WriteLine(Evaluate("(4+8)*2")); 
      Console.ReadKey(); 
     } 

     public static double Evaluate(string expression) 
     { 
      DataTable table = new DataTable(); 
      table.Columns.Add("expression", typeof(string), expression); 
      DataRow row = table.NewRow(); 
      table.Rows.Add(row); 
      return double.Parse((string)row["expression"]); 
     } 

    } 
+0

En Para mi uso, esta solución era aproximadamente 1.5 veces más rápida que NCalc, mientras que era igualmente estable (al menos por lo que estaba haciendo). Manejó expresiones booleanas igual que NCalc. Esto debería publicitarse más. – tootsiejasmine

+0

Esto no maneja poderes o raíces cuadradas. – seekerOfKnowledge

+0

esta solución es perfecta para expresiones simples según lo necesite. Gracias por volver a publicarlo. – zreptil