usar una reemplazar recortar quitar extraer ejemplos como caracteres cadena c# string integer

una - string[] c# ejemplos



Conversión de expresión de cadena en valor entero utilizando C# (5)

Esta pregunta ya tiene una respuesta aquí:

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?


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 .


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);


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 declaración 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.


Use NCalc : estable, simple y poderoso


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.