NCalc Evaluate () дает неправильный ответ - PullRequest
0 голосов
/ 28 апреля 2018

У меня проблема с NCalc: я пытаюсь реализовать способ добавить выражение в мою программу, записав его в текстовое поле, а затем заставить программу использовать его для суммирования / умножения переменных. Вот пример:

Expression expr = new Expression(textBox3.Text);
        expr.Parameters["a"] = 1;
        expr.Parameters["b"] = textBox2.Text;             
        textBox1.Text = expr.Evaluate().ToString();

Я хочу написать выражение в textBox3 и значение переменной «b» в textBox2 и собрать результат в textBox1. Но если я попытаюсь, например, с:

  • textBox2 = "3"

  • textBox3 = "b + a"

результат - «31» вместо 4. Что не так?

1 Ответ

0 голосов
/ 28 апреля 2018

Поскольку textBox2.Text имеет тип string, ваш параметр b является строкой "3", а не числом 3. Если один параметр является строкой, а другой - числом - NCalc (который также работает со строками) преобразует число в строку, как и сам C #:

string s = "3" + 1; // 31

Таким образом, чтобы решить эту проблему, преобразуйте строку в число (конечно, стоит сначала проверить, можно ли ее преобразовать):

int b;
if (int.TryParse(textBox2.Text, out b)) {
    Expression expr = new Expression(textBox3.Text);
    expr.Parameters["a"] = 1;
    expr.Parameters["b"] = b;      
    textBox1.Text = expr.Evaluate().ToString();
}
...