调用函数直到一个人在C#中遇到条件

Tho*_*mas 3 c#

我有一个调用函数的代码,直到满足条件,但我不是在非常提前的阶段所以代码,我一点也不清楚.在这里,我将提交我得到的代码...请一些人讨论代码如何工作的细节.

public static void RunToFirstMatch<T>(Func<T, bool> sentry, params Func<T>[] functions)
{
     functions.Any(f => match(f()));
}
Run Code Online (Sandbox Code Playgroud)

代码调用如下

RunToFirstMatch(v => (v >= 5), Step1, ()=>Step2(1,1), Step3, Step4, ()=>0+1);
Run Code Online (Sandbox Code Playgroud)

RunToFirstMatch函数接受2个参数,但是当调用此函数时,许多参数正在传递....我只是不了解函数的调用.请讨论谢谢.

Jam*_*iec 5

这有几个部分,我可以看到为什么新手可能会发现这个代码有点难以理解.

首先,该方法不带2个参数,第二个被标记params,这意味着任何数量的参数都被传递给该方法,除了第一个参数之外的所有参数都作为数组发送到参数functions(进一步阅读C#params关键字).

接下来,该方法使用IEnumerable<T>扩展方法,该方法Any枚举任何可枚举(例如参数functions),直到其中一个方法返回true.

我认为你有一些参数混淆了,我认为你已经改变sentrymatch,并且假设发生的事情是数组中的每个函数都functions被执行,结果传递给match函数(它将返回true或false).第一个返回true,方法退出.

举个例子,大致基于你自己:

RunToFirstMatch(v => (v >= 5), // match
                  () => 1, () => 4, () => 9, () => 20, () => 40); //function(s)
Run Code Online (Sandbox Code Playgroud)

将执行步骤1,2和3(3是第一个返回false),但4和5不会.