Conversione di espressioni di stringa in Valore intero usando C #

Scusa se questa domanda ha già una risposta, ma non ho trovato una risposta adatta. Sto avendo un’espressione di stringa in C # che ho bisogno di convertire in un valore int o decimale.

Per esempio:

string strExp = "10+20+30"; 

l’uscita dovrebbe essere 60.

come devo farlo ???

    Usa NCalc : stabile, semplice e potente

    Non c’è nulla di integrato in .NET, quindi dovrai usare un parser di espressioni matematiche e usarlo per ottenere il risultato.

    Eccone uno E un paio di articoli .

    Fwiw, c’è un parser di espressioni integrato nel framework .NET. Il metodo 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(); } } 

    Fai attenzione però che non è molto completo. Solo espressioni semplici, il tipo che potresti trovare in una query SQL.

    Avrai bisogno di analizzare la stringa separando i numeri e gli operatori (+, -, *, /, ecc.). I numeri possono essere convertiti in numeri interi o decimali usando i comandi .TryParse (es. Int32.TryParse ()). Gli operatori possono essere gestiti con un’istruzione switch. Più sono complicati i tipi di espressioni che vuoi essere in grado di gestire più duramente sarà. È ansible utilizzare la ricorsione per gestire le sottoespressioni tra parentesi.

    Edit: stavo andando a trovare alcuni articoli di esempio, ma vedo che Oded ha già pubblicato alcuni.

    Forse usate una libreria di script – IronPython (python), cs-script (c #) o anche MSScriptControl (VBscript) – potete quindi passare la vostra espressione di stringa alla libreria per la valutazione.

    Esempio usando il controllo MSScript:

    usando MSScriptControl;

    ScriptControl ScriptEngine = new ScriptControlClass ();

    ScriptEngine.Language = “VBScript”;

    string expr = “10 + 20 + 30”;

    object result = ScriptEngine.Eval (expr);

    decimale d = Convert.ToDecimal (risultato);