c#中的逻辑评估器(评估逻辑(&&,||)表达式)

Sre*_*r P 3 c# linq boolean-logic dynamic-linq logical-operators

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

我想评估此字符串并返回最终的布尔值.

string Logic="1&0|1&(0&1)"
//string Logic="true AND false OR true AND (false AND true)"
Run Code Online (Sandbox Code Playgroud)

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

有没有办法评估这个表达式LINQ / Dynamic LINQ

fix*_*gon 12

没有任何第三方库的方法是使用带表达式的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];
Run Code Online (Sandbox Code Playgroud)

表达式语法与您的示例不同,但它执行相同的操作.一个优点是它的100%.NET框架包含 - > Microsoft管理.错误处理也不错.缺少运营商等的例外情况......

可用的运营商


小智 9

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

System.Data.DataTable table = new System.Data.DataTable();
bool result = (bool)table.Compute("true and false or true", "");
Run Code Online (Sandbox Code Playgroud)

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


Sea*_*ean 5

您可以使用Zentrum

完全免责声明:我写的!