我有一个方法,需要根据传递给它的字符串表达式返回真或假。字符串表达式可能看起来像:
("ASDF"= ="A"|| "BED"!="BED") &&(5祝辞= 2)
或任何计算结果为布尔值的有效c#表达式。我只需要支持基本的字符串和数学比较操作符加上括号。我已经尝试过NCalc,但当我通过它时:
"GEN"= ="GEN"| |"GEN"= ="GENINTER"
生成错误系统。ArgumentException:参数没有定义(参数'GEN')在NCalc.Domain.EvaluationVisitor。访问(标识符参数)
,当我使用下面的代码:
NCalc。表达式= new(filterExpression, EvaluateOptions.IgnoreCase);var filterResultObject =e.Evaluate();
任何关于如何计算任意表达式的想法都值得赞赏,因为直到运行时我才知道表达式。
Greg
我发现NCalc将正确地评估字符串,但只有当它们是单引号时,如!('GEN'=='GEN')。如果字符串是双引号,则抛出错误。
对于您的示例,您可以这样使用NFun包:
string str = ""ASDF"=="A" || "BED"!="BED") && (5>=2)"
bool result = Funny.Calc<bool>(str)
另一个选择是使用DynamicExpresso库。示例用法:
var interpreter = new Interpreter();
bool result = (bool)interpreter.Eval(""GEN" == "GEN" || "GEN" == "GENINTER"");
他们还有一个在线工具来测试表达。