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

时间:2011-12-12 15:11:26

标签: c# linq boolean-logic logical-operators dynamic-linq

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

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

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

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

有没有办法从LINQ / Dynamic LINQ评估此表达式?

4 个答案:

答案 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框架包含 - >微软管理。 错误处理也不错。缺少运营商等的例外......

available operators

答案 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", "");
  

TrueFalseNot运算符和括号是允许的。