0

一切都在 C# 中。

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

我想在上面实现一个简单规则引擎array,例如:If object1.nameis something and object2.nameis something and Function(object1.value,object2.value)==Truethen ....

我开始使用 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 = null;
RuleSetDialog ruleSetDialog = new RuleSetDialog(typeof(My_Array), null, ruleSet);

现在,例如一个规则将是:如果 this.name == "Name1" then 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...

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

我怎样才能做到这一点?应用一条可以满足我要求的规则?

4

2 回答 2

0

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

于 2013-10-25T14:16:30.997 回答
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 接口允许您迭代数组中的每两个对象。

于 2013-10-24T10:15:19.777 回答