我在文件Batch.cs(链接)中的 MoreLinq 中遇到过这段代码:
return _(); IEnumerable<TResult> _()
Run Code Online (Sandbox Code Playgroud)
我阅读了丢弃物,但仍然无法理解上面的代码。当我将鼠标悬停在第一个上方时,_它会说:“捕获的变量:resultSelector,集合”。
_()代表什么?return _();,后面的代码怎么还能IEnumerable<TResult> _()执行呢?Mar*_*ell 33
在_()这里先呼叫本地函数叫_。不寻常,但有效。
局部函数大体上类似于常规方法,除了它只能从声明它的方法内部按名称(即调用方法的常用方式)调用(正如 Eric 在评论中指出的那样,还有一些其他方式它可以被调用,例如通过从方法传递出来的委托),并且(除非被装饰static)它可以从声明方法中获取局部变量和参数作为状态。
在这种情况下,目的是执行热切参数验证。使用迭代器块中的验证代码,参数验证将推迟到第一次MoveNext()调用。(即它不会抱怨source,null直到有人试图foreach超过数据)。
| 归档时间: |
|
| 查看次数: |
2144 次 |
| 最近记录: |