在我的项目中有一个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
评估此表达式?
答案 0 :(得分:11)
没有任何第三方库的方法是使用带表达式的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框架包含 - >微软管理。 错误处理也不错。缺少运营商等的例外......
答案 1 :(得分:5)
您可以使用Zentrum。
完全免责声明:我写了它!
答案 2 :(得分:2)
答案 3 :(得分:1)
这甚至比@fixagon提供的解决方案还短:
System.Data.DataTable table = new System.Data.DataTable();
bool result = (bool)table.Compute(true and false or true", "");
True
,False
和Not
运算符和括号是允许的。