首页 > 解决方案 > C# 7.0 本地函数与内联代码相比如何?

问题描述

Calc考虑一个局部函数,例如

void Foo()
{
    var a = 500f;
    var seed = 0.5f;
    var b = 2000 * Calc(a);

    .... more code ....

    seed = 0.7f;
    if (Calc(5000) > 5)
    {
    }

    double Calc(float f)
    {
       return Sin(f+ seed) * f;
    }
}

本地函数正常使用,无需将其转换为委托。它与在两个地方内联代码相比如何:

  1. 它在语义上与内联不同吗?
  2. 变量等变量是如何seed传递给本地函数的?我希望编译器只是重写函数以接受来自调用站点的附加参数(ref float seed在这种情况下)。但从我读过的内容来看,我认为它更复杂,并且可能使用捕获。但是没有关于这方面的明确文件。
  3. 是否曾经生成隐藏类?
  4. 无声拳击会出现吗?我希望不会,但 C# 是一种四四方方的语言。
  5. 简而言之,本地函数是否会比手动内联代码慢?是否始终设置单独的调用框架?

我发现了这个问题:Local function vs Lambda C# 7.0,但它并没有完全回答这个问题。

请注意,这个问题一般是关于局部函数的,而不仅仅是关于这个特定的例子。

标签: c#-7.0

解决方案


推荐阅读