3

我需要解析一个字符串并生成一个谓词(或表达式,我不介意),其中字符串采用以下形式:

"> 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。我正在使用的不仅仅是数字,字符串和枚举也在混合中。

4

1 回答 1

8

您可以考虑使用 ScottGu 在博客中提到的动态 Linq 库。

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

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);
于 2013-05-31T13:41:09.087 回答