一切都在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 ...
但问题是规则引擎一次只能处理一个对象。
我该怎么做?应用一个可以做我想做的规则吗?
答案 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天的试用期。