Подтвердить что ты не робот

Преобразование строкового выражения в Integer Value с использованием С#

Извините, если на этот вопрос уже дан ответ, но я не нашел подходящего ответа. У меня есть строковое выражение в С#, которое мне нужно преобразовать в значение int или десятичное.

Например:

string strExp = "10+20+30";

выход должен быть 60.

как это сделать?

4b9b3361

Ответ 1

Используйте NCalc: стабильный, простой и мощный

Ответ 2

В .NET ничего не встроено, поэтому вам нужно будет использовать математический анализатор выражений и использовать его для получения результата.

Здесь - это один. И пара статьи.

Ответ 3

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-запросе.

Ответ 4

Вам нужно проанализировать строку, разделив числа и операторы (+, -, *,/и т.д.). Числа могут быть преобразованы в целые числа или десятичные числа с помощью команд .TryParse(например, Int32.TryParse()). Операторы могут обрабатываться с помощью оператора switch. Чем сложнее типы выражений, с которыми вы хотите справиться, тем сложнее будет. Вы можете использовать рекурсию для обработки подвыражений в круглых скобках.

Изменить: я собирался найти некоторые примеры статей, но я вижу, что Oded уже опубликовал некоторые из них.

Ответ 5

Возможно, используйте библиотеку сценариев - 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(результат);