我有一个类C,它继承自A。现在我想写一个规则,它匹配类型A。所以我尝试了以下代码:
public class tmp : Rule
{
public override void Define()
{
A t = null;
When().Match<A>(() => t);
Then().Do(ctx => Console.WriteLine("test"));
}
}但这并不管用。有人能解释一下,我该如何解决这个问题吗?这不管用。
诚挚的问候
发布于 2020-05-25 23:58:59
在父类上匹配肯定可以在NRules中工作。下面是一个完整的工作示例。
public class A
{ }
public class C : A
{ }
public class TestRule : Rule
{
public override void Define()
{
A fact = null;
When()
.Match(() => fact);
Then()
.Do(x => Console.WriteLine("Test"));
}
}
public class Program
{
static void Main(string[] args)
{
var repo = new RuleRepository();
repo.Load(x => x.From(xx => xx.AssemblyOf<Program>()));
var factory = repo.Compile();
var session = factory.CreateSession();
session.Insert(new C());
session.Fire();
}
}如果你发布了你的其余代码,我可以更新这个答案,并显示问题所在。可能您没有将事实插入到会话中,或者您没有调用Fire方法,或者您在编译会话工厂时没有包括规则。
https://stackoverflow.com/questions/61954624
复制相似问题