我需要解析一个字符串并生成一个谓词(或表达式,我不介意),其中字符串采用以下形式:
">30"
我不想自己写,有几个库可以做这样的事情——我试过 FLEE 和 NCalc,但它们似乎要求字符串采用“a > 30”的形式并提供值'a' 作为参数。
有没有一个库可以让我写类似的东西
Func<int, bool> predicate = parser.Parse("> 30");
bool a = predicate(10); // false
bool b = predicate(40); // true
我需要 <、>、= 等运算符,并支持 OR 和 AND。我处理的不仅仅是数字,字符串和枚举也在其中。
最佳答案
您可以考虑使用 ScottGu 在博客中介绍的动态 Linq 库。
http://msdn.microsoft.com/en-US/vstudio/bb894665.aspx
如果应该让你做类似下面的事情。
const string exp = "variable > 30";
var p = Expression.Parameter(typeof(int), "variable");
var e = DynamicExpression.ParseLambda(new[] { p }, null, exp);
bool a = (bool)e.Compile().DynamicInvoke(20);
bool b = (bool)e.Compile().DynamicInvoke(40);
或
Func<int, bool> predicate = (Func<int, bool>)e.Compile();
bool a = predicate(20);
bool b = predicate(40);
关于c# - 解析字符串以生成谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16858347/