如何检测 lambda 函数结果中的重复项?



我们正在使用基于 lambda 函数的规则引擎。每个函数都使用类型实例化:

Func<Term, bool>

每个函数使用一个 Term 类型的对象并返回一个布尔值。 术语是如下功能的集合:

public class Term
{
public string Name { get; set; }
public int Age { get; set; }
public double Price { get; set; }
public int SomeCount { get; set; }
}

这些函数定义了这些条款的一些条件。例如:

Func<Term, bool> function = t => t.Age >= 18 && t.Name == "Tom";
Func<Term, bool> function = t => t.Price >= 26 || t.Price < 3200;
...

给定一组这些函数,有没有办法检测是否有多个函数为任何特定术语返回 true?换句话说,有没有办法检查这些函数是否是非单射的?当然,暴力破解所有可能的术语是没有选择的。

我不能使用给定的术语。我有一组这些函数,我想知道是否有一个术语有多个函数返回 true。

编辑: 我意识到我必须解析一些语句并执行大量硬编码表达式才能统一每个变量的语句,但这甚至可能吗?我遇到了麻烦,尤其是 ||-算子。

必须有一种方法来检查两个函数是否对任何特定术语都返回 true。

将函数保存在列表或数组中。然后,可以通过 LINQ 检查是否有多个函数返回 true:

Func<Term, bool>[] functions = new Func<Term, bool>[]
{
t => t.Age >= 18 && t.Name == "Tom",
t => t.Price >= 26 || t.Price < 3200
};
Term yourTerm = new Term();
int amountFunctionsReturningTrue = functions.Count(f => f(yourTerm));
if(amountFunctionsReturningTrue > 1)
{
Console.WriteLine("More than one function returned true");
}

相关内容

  • 没有找到相关文章

最新更新