我在 C# 中面临一个奇怪的问题,我需要评估一些数学字符串表达式,这些表达式可能会除以0
. 这是一个例子:
string expression = GetUserInput(); // Example: "(x + y) / z", where z may equal to 0
我目前正在使用NCalc库来评估这个表达式,DivideByZeroException
如果z
当前表达式中的参数是0
.
我尝试通过执行以下操作来捕获异常:
try {
string formula = GetUserInput();
Expression exp = new Expression(formula);
// ...
exp.Evaluate(); // Throws a DivideByZeroException
} catch (DivideByZeroException e) {
//ignored
}
但是,我需要以高效的方式评估这个表达式超过 6000 次(使用不同的变量),因此每次捕获异常都会显着减慢我的应用程序。
我有多个这样的表达式,每个表达式都由用户输入。我不知道给定的表达式是否试图除以零。
有没有办法以“安全”的方式评估 C# 中的数学表达式,尝试除以0
将返回静态数字(0
或无穷大),而不会引发异常?