NCalc Evaluate() 给出错误答案

NCalc Evaluate() gives wrong answer

我在使用 NCalc 时遇到问题:我正在尝试实现一种方法,通过将表达式写入我的程序来向我的程序添加表达式,然后让程序将其用于 sum/multiply 变量。 这是一个例子:

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

我想在textBox3中写入表达式,在textBox2中写入"b"变量的值,并将结果收集到textBox1中。 但是,例如,如果我尝试使用:

结果是“31”而不是 4。 怎么了?

因为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();
}