Jon*_*eet 14

我看到的答案假设你在谈论编译或JIT时间内联 - 而且它们完全正确.但是,我所听到的"内联"一词的另一个用途是用于lambda表达式 - 在C#中,类似于:

public IEnumerable<int> Foo()
{
    int[] numbers = new[] { 1, 5, 2, 5, 6 };

    return numbers.Select(x => x+10);
}
Run Code Online (Sandbox Code Playgroud)

x => x+10(lambda表达式)可视为在源代码的术语"内联函数",因为它是一个额外的功能在另一种方法中声明"内联".

是的,VB9有这个:

Dim len As Func(Of String, Integer) = Function(x) x.Length       
Console.WriteLine(len("foo"))
Run Code Online (Sandbox Code Playgroud)

我相信VB9与C#相比有更多限制 - 例如,我不认为你可以Action<T>在VB9中使用lambda表达式创建一个(或任何其他具有void返回类型的委托类型),而在C#中它很容易.同样地,我认为lambda必须只是VB9中的单个表达式,而在C#中,它可以是括号中的整个块.

从VB10开始,您也可以在VB中创建多行lambda表达式.

当然,如果问题实际上是指执行而不是源代码,那么所有这些都是无关紧要的:)

  • 你不应该删除它!它只是帮助了我. (6认同)

lig*_*t78 7

内联是CLR(JIT)的责任,并且在内联函数时存在一些条件:

  1. 代码大小小于IL的32个字节.
  2. 该函数不包含"复杂"结构,例如循环,开关等.
  3. 该函数不包含try/catch/finally.
  4. 该函数未声明为虚拟.

正如您可能会发现的那样,32字节在代码方面不是很多,它适用于快速和小的if-else条件测试,属性getter/setter.我不认为您可以通过内联更多代码获得任何速度.


Fre*_*dou 5

5年后这个问题还有一些活动(已经???)

使用.net 4.5现在可以指定内联方法

只需使用此属性

<MethodImplAttribute(MethodImplOptions.AggressiveInlining)>
Run Code Online (Sandbox Code Playgroud)