Conversión de expresión de cadena a valor entero utilizando C #

Lo siento si esta pregunta ya está respondida, pero no encontré una respuesta adecuada. Tengo una expresión de cadena en C # que necesito convertir a un valor int o decimal.

Por ejemplo:

string strExp = "10+20+30"; 

la salida debe ser 60.

¿cómo voy a hacer eso?

Use NCalc : estable, simple y poderoso

No hay nada integrado en .NET, por lo que deberá usar un analizador de expresiones matemáticas y usarlo para obtener el resultado.

Aquí hay uno. Y un par de artículos .

Fwiw, hay un analizador de expresiones integrado en .NET Framework. El método DataTable.Compute () lo usa:

 using System; using System.Data; class Program { static void Main(string[] args) { var expr = "10 + 20 + 30"; var result = new DataTable().Compute(expr, null); Console.WriteLine(result); Console.ReadLine(); } } 

Sin embargo, ten en cuenta que no es uno muy completo. Solo expresiones simples, del tipo que encontrarías en una consulta SQL.

Tendrá que analizar la cadena separando los números y los operadores (+, -, *, /, etc.). Los números se pueden convertir a enteros o decimales utilizando los comandos .TryParse (por ejemplo, Int32.TryParse ()). Los operadores se pueden manejar con una statement de cambio. Cuanto más complicados sean los tipos de expresiones que desea manejar, más difícil será. Puede usar recursión para manejar sub expresiones entre paréntesis.

Editar: iba a encontrar algunos ejemplos de artículos, pero veo que Oded ya ha publicado algunos.

Tal vez use una biblioteca de secuencias de comandos: IronPython (python), cs-script (c #) o incluso MSScriptControl (VBscript): a continuación, puede pasar su expresión de cadena a la biblioteca para su evaluación.

Ejemplo usando el control de MSScript:

utilizando MSScriptControl;

ScriptControl ScriptEngine = new ScriptControlClass ();

ScriptEngine.Language = “VBScript”;

cadena expr = “10 + 20 + 30”;

resultado del objeto = ScriptEngine.Eval (expr);

decimal d = Convert.ToDecimal (resultado);