寻找可以循环通过几个对象的规则引擎

时间:2013-10-24 09:41:23

标签: c# arrays rule-engine

一切都在C#中。

我有一个array某个类,其中包含很多字段和信息。

我想在array上实现一个简单规则引擎,例如: 如果object1.name是某种东西而object2.name是某种东西 然后Function(object1.value,object2.value)==True然后......

我开始使用Windows Workflow Foundation,遇到的问题是 我给规则引擎一个特定的object_type来处理,所以我实际上不能有规则 检查2个不同的对象。

例如,我告诉规则引擎在typeof(MY_CLASS)上工作。 然后规则将如下所示:“如果this.name是某种东西而且(我不能称之为另一个对象!)......”

我基本上希望规则像这样运行:“如果this[i].name是某种东西而this[j].name是某种东西......” 所以阵列中的所有情侣最终都会循环通过。

要清理,这就是我设置规则引擎(WF)的方法:

public class My_Array { 字符串名称,描述...... 和许多领域}

Data_Array = new My_Array [N];

RuleSet ruleSet = null;
RuleSetDialog ruleSetDialog = new RuleSetDialog(typeof(My_Array),null,ruleSet);

现在,例如,规则将是: 如果this.name ==“Name1”则this.description =“description1”

这就是我在ONE对象上执行规则的方式:

RuleValidation validation = new RuleValidation(typeof(My_Array), null);
        RuleExecution execution = new RuleExecution(validation, Data_Array[0]);

        ruleSet.Execute(execution);

因此该规则仅适用于Data_Array [0]。我可以循环应用于所有数组但是 它只能一次应用于一个单元格。

我想编写一次检查多个对象的规则,例如,这样的规则:
if object1.name == something and object2.name == somethigelse then ...

但问题是规则引擎一次只能处理一个对象。

我该怎么做?应用一个可以做我想做的规则吗?

2 个答案:

答案 0 :(得分:0)

我不太了解你的问题。我不允许发表评论。

你知道帮助你在阵列中排序的接口是IComparer,对吧?  这是一个通过数组排序的小例子。只要告诉我你是否可以通过某种方式添加它,我该如何帮助你做到这一点。希望它足够清楚。   所以:回到基础:)

public class Human : IComparer<Human> 
{
    public string Name { get; set; }

    public int Compare(Human first, Human second)
    {
        return  first .Name .ToCharArray().First().CompareTo(second.Name    .ToCharArray().First());

    }


}

class Program
{
    static void Main(string[] args)
    {
        IComparer<Human> myCompare = new Human();

        Human[] myArray = new Human[3] { new Human() { Name = "Johny" }, new Human() { Name = "Alexander" }, new Human { Name = "Bobby" } };
        Array.Sort<Human>(myArray, myCompare);
        foreach (var item in myArray)
        {
            Console.WriteLine(item.Name);
        }

    } 

IComparer接口允许您迭代到数组中的每两个对象。

答案 1 :(得分:0)

我最近需要一个简单的项目规则引擎,所以我自己写了(使用Windows Workflow和规则创建者的重新托管工作流编辑器)。它不像其他一些规则引擎一样使用任何前向/后向链接规则,只是针对所需的.NET对象从上到下执行规则。它很简单,但它适用于我需要的东西。这很难创建所以我决定许可它。检查http://www.enigmasupercomputing.com/RulesEngine以获取教程和演示以及30天的试用期。