C#中的逻辑表达式求值器(求解逻辑(&&,||)表达式)

7
在我的项目中有一个“逻辑评估”部分,它以包含“逻辑表达式”(true/false)的字符串作为输入。我想要对这个字符串进行评估,并返回最终的布尔值。
string Logic="1&0|1&(0&1)"
//string Logic="true AND false OR true AND (false AND true)"

这将是我的逻辑。长度可能会增加。
有没有办法从LINQ / Dynamic LINQ评估这个表达式?

3
语言集成查询不等于词法分析/评估。 - MerickOWA
在示例中为什么要使用单个按位 AND,而是用短路逻辑 OR? - Kieren Johnstone
@ Kieren Johnstone:哦,对不起..没有那种意思...我会编辑它.. :) - Sreekumar P
如果可以使用库,请查看这里 - Genfood
2个回答

15

一种不需要任何第三方库的方法是使用DataTable with expression。

在那里,您甚至可以评估除了布尔值以外的其他结果值类型。

System.Data.DataTable table = new System.Data.DataTable();
table.Columns.Add("", typeof(Boolean));
table.Columns[0].Expression = "true and false or true";

System.Data.DataRow r = table.NewRow();
table.Rows.Add(r);
Boolean result = (Boolean)r[0];
表达式语法与你的示例不完全相同,但作用是相同的。优点是它是100%包含在.NET框架中的-->由Microsoft管理。错误处理也不错,例如缺少运算符的异常处理等...。 可用的运算符

但是这需要7毫秒...我的现有代码只需要不到1毫秒...我想要减少这个时间。 - Sreekumar P
我不认为这是最高效的选择...但它有相当多的可能性。 - fixagon

12

这甚至比@fixagon给出的解决方案还要短:

System.Data.DataTable table = new System.Data.DataTable();
bool result = (bool)table.Compute("true and false or true", "");

True, False, Not 运算符和圆括号都是允许的。


1
对我来说可以(点赞)。另外,也可以使用括号来改变优先级。 - Teodor Tite

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接