C#7.0 中的局部函数与 foreach 或循环有何不同?
How is local function in C#7.0 different from a foreach or a loop?
这更像是一个为什么问题。开始了。
C# 7.0 添加了一个名为 "Local Function" 的新功能。下面是一段代码。
public int Fibonacci(int x)
{
if (x < 0) throw new ArgumentException("Less negativity please!", nameof(x));
return Fib(x).current;
(int current, int previous) Fib(int i)
{
if (i == 0) return (1, 0);
var (p, pp) = Fib(i - 1);
return (p + pp, p);
}
}
我不明白的是,它对同一方法进行递归调用。我们可以使用普通的 foreach 轻松实现这一点。那为什么是局部函数。
MSDN 说
methods implemented as iterators commonly need a non-iterator wrapper
method for eagerly checking the arguments at the time of the call.
(The iterator itself doesn’t start running until MoveNext is called).
需要一些帮助来理解它的概念。
its doing a recursive call to the same method. We can easily achieve this with a normal foreach
这是两种不同的东西:尾递归(方法在方法本身的末尾调用自身)或遍历集合。它们并不总是可以互换的,但可以用来达到相同的最终结果。
局部函数只不过是一个class方法,其作用域仅限于声明它的方法体。
局部函数比递归更有用。这是防止在多个块中重复代码的简单方法。
这更像是一个为什么问题。开始了。
C# 7.0 添加了一个名为 "Local Function" 的新功能。下面是一段代码。
public int Fibonacci(int x)
{
if (x < 0) throw new ArgumentException("Less negativity please!", nameof(x));
return Fib(x).current;
(int current, int previous) Fib(int i)
{
if (i == 0) return (1, 0);
var (p, pp) = Fib(i - 1);
return (p + pp, p);
}
}
我不明白的是,它对同一方法进行递归调用。我们可以使用普通的 foreach 轻松实现这一点。那为什么是局部函数。
MSDN 说
methods implemented as iterators commonly need a non-iterator wrapper method for eagerly checking the arguments at the time of the call. (The iterator itself doesn’t start running until MoveNext is called).
需要一些帮助来理解它的概念。
its doing a recursive call to the same method. We can easily achieve this with a normal foreach
这是两种不同的东西:尾递归(方法在方法本身的末尾调用自身)或遍历集合。它们并不总是可以互换的,但可以用来达到相同的最终结果。
局部函数只不过是一个class方法,其作用域仅限于声明它的方法体。
局部函数比递归更有用。这是防止在多个块中重复代码的简单方法。