Fwiw, в .NET framework встроен синтаксический анализатор выражений. Его использует метод DataTable.Compute () :
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();
}
}
Однако учтите, что это не очень полнофункциональный метод. Только простые выражения, которые можно найти в запросе SQL.
Вам нужно разобрать строку, разделяя числа и операторы (+,-,*,/ и т.д.). Числа можно преобразовать в целые или десятичные числа с помощью команд .TryParse (например, Int32.TryParse()). Операторы можно обрабатывать с помощью оператора switch. Чем сложнее типы выражений, которые вы хотите иметь возможность обрабатывать, тем сложнее это будет сделать. Вы можете использовать рекурсию для обработки подвыражений в круглых скобках.
Edit: Я собирался найти некоторые примеры статей, но вижу, что Одед уже разместил некоторые из них.
В .NET ничего не встроено, поэтому вам придется использовать парсер математических выражений и использовать его для получения результата.
Возможно, используйте библиотеку сценариев - IronPython (python), cs-script (c #) или даже MSScriptControl (VBscript) - затем вы можете передать свое строковое выражение в библиотеку для оценки.
Пример использования MSScript Control:
с использованием MSScriptControl;
...
ScriptControl ScriptEngine = new ScriptControlClass ();
ScriptEngine.Language = "VBScript";
string expr = "10 + 20 + 30 ";
объект result = ScriptEngine.Eval (expr);
decimal d = Convert.ToDecimal (результат);