NCalc Evaluate()给出了错误的答案

时间:2018-04-28 12:08:04

标签: c# ncalc

我对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 :(得分:1)

由于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();
}