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中。
但是,例如,如果我尝试使用:
textBox2 = "3"
textBox3 = "b+a"
结果是“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();
}
我在使用 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中。 但是,例如,如果我尝试使用:
textBox2 = "3"
textBox3 = "b+a"
结果是“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();
}