这里调用的是什么:return _()

Rob*_*ron 36 c#

我在文件Batch.cs链接)中的 MoreLinq 中遇到过这段代码:

return _(); IEnumerable<TResult> _()
Run Code Online (Sandbox Code Playgroud)

我阅读了丢弃物,但仍然无法理解上面的代码。当我将鼠标悬停在第一个上方时,_它会说:“捕获的变量:resultSelector,集合”。

  • 两者分别_()代表什么?
  • 既然我们在做 a return _();,后面的代码怎么还能IEnumerable<TResult> _()执行呢?

Mar*_*ell 33

_()这里先呼叫本地函数_。不寻常,但有效。

局部函数大体上类似于常规方法,除了它只能从声明它的方法内部按名称(即调用方法的常用方式)调用(正如 Eric 在评论中指出的那样,还有一些其他方式它可以被调用,例如通过从方法传递出来的委托),并且(除非被装饰static)它可以从声明方法中获取局部变量和参数作为状态。

在这种情况下,目的是执行热切参数验证。使用迭代器块中的验证代码,参数验证将推迟到第一次MoveNext()调用。(即它不会抱怨sourcenull直到有人试图foreach超过数据)。

  • 小问题:本地函数的本地函数特征是它们的*名称*仅在声明的本地邻居范围内。本地函数可以从任何地方“调用”,例如,通过向其传递委托。局部性是关于控制对*名称*的访问,而不是对*命名的事物*的访问。 (7认同)