Ответ 1
Используйте NCalc: стабильный, простой и мощный
Извините, если на этот вопрос уже дан ответ, но я не нашел подходящего ответа. У меня есть строковое выражение в С#, которое мне нужно преобразовать в значение int или десятичное.
Например:
string strExp = "10+20+30";
выход должен быть 60.
как это сделать?
Используйте NCalc: стабильный, простой и мощный
В .NET ничего не встроено, поэтому вам нужно будет использовать математический анализатор выражений и использовать его для получения результата.
Fwiw, существует синтаксический анализатор выражений, встроенный в платформу .NET. Метод 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. Чем сложнее типы выражений, с которыми вы хотите справиться, тем сложнее будет. Вы можете использовать рекурсию для обработки подвыражений в круглых скобках.
Изменить: я собирался найти некоторые примеры статей, но я вижу, что Oded уже опубликовал некоторые из них.
Возможно, используйте библиотеку сценариев - IronPython (python), cs- script (С#) или даже 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(результат);