计算c#中的任意字符串表达式



我有一个方法,需要根据传递给它的字符串表达式返回真或假。字符串表达式可能看起来像:

("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"");

他们还有一个在线工具来测试表达。

相关内容

  • 没有找到相关文章

最新更新