提问人:Greg W 提问时间:1/16/2023 更新时间:5/6/2023 访问量:148
在 c 中计算任意字符串表达式#
Evaluating an arbitrary string expression in c#
问:
我有一个方法,需要根据传递给它的字符串表达式返回 true 或 false。字符串表达式可能如下所示:
(“ASDF”==“A” ||“BED”!=“BED”) && (5>=2)
或计算结果为布尔值结果的任何有效 C# 表达式。我只需要支持基本的字符串和数学比较运算符以及括号。我尝试过 NCalc,但是当我通过它时:
“GEN”==“GEN” ||“GEN”==“GENINTER”
它生成错误 System.ArgumentException:未定义参数(参数“GEN”) 在 NCalc.Domain.EvaluationVisitor.Visit (Identifier 参数)
当我使用以下代码时:
NCalc.Expression e = new(filterExpression, EvaluateOptions.IgnoreCase); var filterResultObject =e.Evaluate();
对如何计算任意表达式的任何想法表示赞赏,因为我在运行时才知道表达式。
格雷格
答:
0赞
Greg W
1/17/2023
#1
我发现 NCalc 会正确评估字符串,但前提是它们是单引号,例如 !('GEN'=='GEN')。如果字符串用双引号引起来,则会引发错误。
0赞
tmt
1/25/2023
#2
对于您的示例,您可以像这样使用 NFun 包:
string str = "\"ASDF\"==\"A\" || \"BED\"!=\"BED\") && (5>=2)"
bool result = Funny.Calc<bool>(str)
0赞
Dimitris Maragkos
5/6/2023
#3
另一种选择是使用 DynamicExpresso 库。用法示例:
var interpreter = new Interpreter();
bool result = (bool)interpreter.Eval("\"GEN\" == \"GEN\" || \"GEN\" == \"GENINTER\"");
他们还有一个在线工具来测试表达式。
上一个:比较字符变量
评论