【问题标题】:Logic Evaluator in c# (Evaluate Logical (&& ,|| ) expressions)c#中的逻辑评估器(评估逻辑(&&,||)表达式)
【发布时间】:2012-01-18 13:42:40
【问题描述】:

在我的项目中有一个 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 评估这个表达式?

【问题讨论】:

  • 语言综合查询!= 词法解析/评估
  • 在示例中使用单个按位与但短路逻辑或的任何原因?
  • @ Kieren Johnstone :哦,对不起.. 没有那样的......我会编辑它.. :)
  • 如果可以使用图书馆,请查看here

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


【解决方案1】:

没有任何第三方库的方法是使用带有表达式的 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 框架包含 --> Microsoft 管理。 错误处理也不错。缺少运算符等的例外情况...

available operators

【讨论】:

  • 但这需要 7 毫秒......我现有的代码需要不到 1 毫秒......我想减少这个
  • 我不认为它是最高效的选择...但有相当多的可能性
【解决方案2】:

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

System.Data.DataTable table = new System.Data.DataTable();
bool result = (bool)table.Compute("true and false or true", "");

TrueFalseNot 运算符以及括号是允许的。

【讨论】:

  • 为我工作(赞成)。另外:为了改变优先级,也允许使用括号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多