Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检测lambda函数结果中的重复项?_C#_Lambda_Logic_Operators_Logical Operators - Fatal编程技术网

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

C# 如何检测lambda函数结果中的重复项?,c#,lambda,logic,operators,logical-operators,C#,Lambda,Logic,Operators,Logical Operators,我们正在使用一个基于lambda函数的规则引擎。每个函数都使用以下类型实例化: Func<Term, bool> 这些函数定义了这些术语的一些条件。例如: Func<Term, bool> function = t => t.Age >= 18 && t.Name == "Tom"; Func<Term, bool> function = t => t.Price >= 26 || t.Price < 3200;

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

Func<Term, bool>
这些函数定义了这些术语的一些条件。例如:

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");
 }

你能举个例子吗?你期望什么?函数是否可以为相等项返回不同的结果?| |运算符有什么问题?是否要测试函数而不将其应用于数据?是否要测试价格<10且价格>10是否为反向独占?测试一个特定术语很容易。只要执行它。因为“任何可能的术语都会变得困难。是的。我想用任何可能的术语来测试它。我想检测重复项,或者更确切地说是交叉点,而不必强制执行每个可能的项。我知道这会变得很复杂,而且会有很多解析开销。我只是想知道这是否可能。谢谢。但在这个例子中,我有一个特定的术语。我想检测任何特定术语的重复项。我想我不清楚,我同意你不够清楚。如果你想检查一个函数是否总是返回true,就像你的第二个例子一样,独立于它应用于哪个术语实例,我想你需要表达式树。我不能用给定的术语工作。我有一组这样的函数,我想知道是否有一个术语有多个函数返回true。@Ipsider:我想解决方案也会涉及表达式树@Pavel Anikhouski:对于任何一个函数,你都会检查>=1而不是>1。我正在使用数据库中的表达式树处理lambda函数。这对情况没有帮助,它只是表示逻辑表达式的另一种形式
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");
 }