c# - boolean 逻辑规则评估器

标签 c# xml logic boolean rule-engine

我基本上展示了一项调查,人们回答问题就像测试一样, 并且有不同的路径,到目前为止非常容易,但我想让它更加动态,这样我就可以有一个用于所有路径测试的通用规则,使评估器更容易使用当前我只需允许 AND,并且每个 OR 实质上成为集合中的另一个规则,

QuestionID,然后我形成一堆像这样的 AND 规则

<rule id="1">
<true>
 <question ID=123>
 <question ID=124>
</true>
<false>
 <question ID=127>
 <question ID=128>
</false>
</rule>
<rule id="2"><true>
 <question ID=123>
 <question ID=125>
</true>
<false>
 <question ID=127>
</false>
</rule>

这条规则 1 规定,如果问题 123 和 124 回答正确,而问题 127、128 回答错误,则通过。 OR(规则 2)是,如果 123 和 125 为真且 127 为假,它们也会通过。 如果有很多组合,这会变得乏味,所以我想在逻辑中实现 OR,我只是不确定解决这个问题的最佳方法是什么。

我认为规则引擎太复杂了,必须有一种更简单的方法,也许像 LINQ 一样构造一个图,然后评估它们是否通过,

谢谢!

--不是计算机科学专业。

最佳答案

这并不一定很复杂:您已经完成了大部分工作,因为您的 and 元素有效地实现了 AND 类型的规则。我会介绍一个可以容纳 和 元素的元素。

在你的能力范围内,你可以:

  • 一个 RuleBase 类,具有“公共(public)抽象 bool Evaluate()”方法
  • TrueRule、FalseRule 和 OrRule 类,其中包含 RuleBase 对象列表
  • QuestionRule 类,引用特定问题

您将按如下方式对其中每一个实现 Evaluate 方法:

  • TrueRule:仅当所有包含的规则从 Evaluate 中返回 true 时才返回 true
  • FalseRule:仅当所有包含的规则从 Evaluate 中返回 false 时才返回 true
  • OrRule: 如果包含的规则中至少有一个从 Evaluate 返回 true,则返回 true
  • QuestionRule:返回原始问题的答案

这个类层次结构实现了一个简单的抽象语法树(AST)。 LINQ 以 System.Expressions.Expression 类的形式执行几乎相同的操作,但如果所有内容如何组合在一起并不明显,那么编写您自己的会很有帮助。

关于c# - boolean 逻辑规则评估器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/247779/

相关文章:

java - Android中用ListView显示矩形框

c# - 从非托管 C# DLL 返回列表/数组

c# - 一个按钮的 OnClientClick 和 Click 事件没有触发 - FireFox 中的问题

java - JAXB 可以在基类中初始化值吗?

xml - XSLT 创建 XML 标签,标签内带有计数器

php - 从另一个 PHP 函数调用 PHP 函数的逻辑错误

javascript - JSON 模式中 bool 项列表的异或逻辑

c++ - 三个互不相等的随机数?

c# - 从类中重定向到 Action 的正确方法?

C# - 多个服务器的 WMI 查询太慢