Possible Duplicates:
Is there a string math evaluator in .NET?
Converting string expression to Integer Value using C#
Best and shortest way to evaluate mathematical expressions
c# evaluating string “3*(4+2)” yield int 18
Is there a way to calculate math expressions like (2-3/4*12) in a different way than presented here?
DataTable has a Compute method that allows you to write this:
Note that this is limited to simple math expressions.
Other option consist in using a dynamic language in the DLR such as IronPython and IronRuby. Check-out this post:
You may also check the NCalc library on GitHub.
NB: This answer is just for completeness. It's definitely not an approach that I'd recommend.
It's possible to access the (deprecated) JScript libraries directly from C#, which means that you can use the equivalent of JScript's
eval
function.There are some interesting options available to you.
NCalc - a C# Lexer Parser built with ANTLR. This will parse your text and allow you to assign values to parameters / variables. The interpreter is C#, so you do not have to load additional assemblies in an app domain, etc.
JINT - a C# based Javascript interpreter built by the same author of ECalc using ANTLR to create the grammar. This is currently in beta but works well with calculations and functions.
CS-Script.Net - From the site: "CS-Script is a CLR (Common Language Runtime) based scripting system which uses ECMA-compliant C# as a programming language. CS-Script currently targets Microsoft implementation of CLR (.NET 2.0/3.0/3.5) with limited support on Mono." The load scripts and create assemblies in memory and separate app domain. It is quite robust, and I use it in production for embedded scripting.
Uh that seems like a very over the top solution.
What you really want is a simple parser.
You need to break the string up into tokens and then evaluate them. This will get you started researching. http://en.wikipedia.org/wiki/Parsing#Overview_of_process
Definitely in the "do not recommend" category, but for completeness -- if you've got a database you can conveniently connect to, send it the query "SELECT expression".
Check out FLEE (Fast Lightweight Expression Evaluator) - http://flee.codeplex.com/
It's free and fast and I've used it in a couple of projects.