gpt4 book ai didi

c# - 本地函数与 Lambda C# 7.0

转载 作者:IT王子 更新时间:2023-10-29 03:31:11 28 4
gpt4 key购买 nike

我正在查看 C# 7.0 中的新实现我发现他们实现了局部函数很有趣,但我无法想象局部函数比 lambda 表达式更受青睐的场景,两者之间有什么区别。

我知道 lambda 是匿名函数,而本地函数不是,但我想不出一个真实世界的场景,其中本地函数比 lambda 表达式有优势

任何例子将不胜感激。谢谢。

最佳答案

This was explained by Mads Torgersen in C# Design Meeting Notes where local functions were first discussed :

You want a helper function. You are only using it from within a single function, and it likely uses variables and type parameters that are in scope in that containing function. On the other hand, unlike a lambda you don't need it as a first class object, so you don't care to give it a delegate type and allocate an actual delegate object. Also you may want it to be recursive or generic, or to implement it as an iterator.

进一步扩展它的优点是:

  1. 性能。

    创建 lambda 时,必须创建委托(delegate),在这种情况下这是不必要的分配。本地函数实际上只是函数,不需要委托(delegate)。

    此外,局部函数在捕获局部变量方面效率更高:lambda 通常将变量捕获到类中,而局部函数可以使用结构(使用 ref 传递),这再次避免了分配。

    这也意味着调用本地函数的成本更低,并且它们可以内联,从而可能进一步提高性能。

  2. 局部函数可以递归。

    Lambdas 也可以是递归的,但它需要笨拙的代码,您首先要在其中分配 null到一个委托(delegate)变量,然后是 lambda。局部函数自然可以递归(包括相互递归)。

  3. 局部函数可以是通用的。

    Lambda 不能是泛型的,因为它们必须分配给具有具体类型的变量(该类型可以使用外部作用域中的泛型变量,但这不是一回事)。

  4. 局部函数可以作为迭代器实现。

    Lambda 不能使用 yield return (和 yield break )关键字来实现 IEnumerable<T> -返回功能。本地函数可以。

  5. 本地函数看起来更好。

    这在上面的引用中没有提到,可能只是我个人的偏见,但我认为正常的函数语法看起来比将 lambda 分配给委托(delegate)变量更好。局部函数也更简洁。

    比较:

    int add(int x, int y) => x + y;
    Func<int, int, int> add = (x, y) => x + y;

关于c# - 本地函数与 Lambda C# 7.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40943117/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com