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运算符和括号是允许的。