我有一个调用函数的代码,直到满足条件,但我不是在非常提前的阶段所以代码,我一点也不清楚.在这里,我将提交我得到的代码...请一些人讨论代码如何工作的细节.
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个参数,但是当调用此函数时,许多参数正在传递....我只是不了解函数的调用.请讨论谢谢.
这有几个部分,我可以看到为什么新手可能会发现这个代码有点难以理解.
首先,该方法不带2个参数,第二个被标记params,这意味着任何数量的参数都被传递给该方法,除了第一个参数之外的所有参数都作为数组发送到参数functions(进一步阅读C#params关键字).
接下来,该方法使用IEnumerable<T>扩展方法,该方法Any枚举任何可枚举(例如参数functions),直到其中一个方法返回true.
我认为你有一些参数混淆了,我认为你已经改变sentry了match,并且假设发生的事情是数组中的每个函数都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不会.
| 归档时间: |
|
| 查看次数: |
289 次 |
| 最近记录: |