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

本文关键字:表达式 | 更新日期: 2023-09-27 18:17:29

在我的项目中有一个Logic evaluation部分,它将输入作为包含logical expressions (true/false)的字符串。

我想计算这个字符串并返回一个最终的布尔值。

string Logic="1&0|1&(0&1)"
//string Logic="true AND false OR true AND (false AND true)"

这是我的Logic。长度可能会增加

是否有办法从LINQ / Dynamic LINQ计算这个表达式?

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

一种不需要任何第三方库的方法是使用带表达式的DataTable

你甚至可以计算其他类型的结果值,而不仅仅是布尔值。

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框架包含->微软管理。错误处理也不错。缺少操作符等的异常

可用操作符

这比@fixagon:

给出的解决方案更短
System.Data.DataTable table = new System.Data.DataTable();
bool result = (bool)table.Compute("true and false or true", "");

允许True, False, Not操作符,以及括号。