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,但是我不确定如何在不预先评估每个表达式的情况下使用它,从而破坏了短行程的有用性.
您可以使用内置Enumerable.Any
和Enumerable.All
扩展方法.
bool andResult = tests.All(test => test(value));
bool orResult = tests.Any(test => test(value));
Run Code Online (Sandbox Code Playgroud)