函数数组的逻辑运算符

And*_*rew 0 .net c# arrays lambda logic

我有一段时间有这个想法,我很好奇是否有可能以有价值的方式实施.我想获取一个布尔返回的lambda表达式数组,并对其结果执行逻辑运算.这是一个有效列表的无意义的例子:

var tests = new List<Func<int, bool>>() {
    (x) => x > 10,
    (x) => x < 100,
    (x) => x != 42
};
Run Code Online (Sandbox Code Playgroud)

我想做的主要是

bool result = tests.And();
Run Code Online (Sandbox Code Playgroud)

或执行其他逻辑操作.我意识到我可以写一个IEnumerable实现类并执行此操作,但我想知道它是否已经完成.显然,实现必须以同样的方式有效地工作,短路

if (truthyExpression || falseyExpression)
Run Code Online (Sandbox Code Playgroud)

永远不会开始评估falseyExpression.

我在框架中看到的唯一可能有用的是Bit Array,但是我不确定如何在不预先评估每个表达式的情况下使用它,从而破坏了短行程的有用性.

Jul*_*ain 6

您可以使用内置Enumerable.AnyEnumerable.All扩展方法.

bool andResult = tests.All(test => test(value));
bool orResult = tests.Any(test => test(value));
Run Code Online (Sandbox Code Playgroud)

  • @khellang`Enumerable.Any`如果委托返回`true`(并返回`true`本身)将"短路",如果委托返回`false`,则'Enumerable.All`将"短路"(并返回`假`本身). (3认同)