c# - 解析字符串以生成谓词

标签 c# parsing expression

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

">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://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);

关于c# - 解析字符串以生成谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16858347/

相关文章:

c# - 获取应用程序内实现接口(interface)的所有对象

c# - .NET/C#/WPF 项目的命名约定

python - 在python中将 latex 代码转换为mathml或svg代码

php - preg_replace 正则表达式问题

delegates - Func<> 委托(delegate)有什么了不起的?

c# - 记录可能为空参数时 Log.Information 和 Log.Logger.Information 之间的 Serilog 差异

C# 随机 JSON 对象

java - 根据格式将字符串日期验证为有效日期的最佳方法是什么?

date - Java中`uuuu`格式化模式代码中的`yyyy`与`DateTimeFormatter`?

c# - linq 子句中的值不能为空