有没有办法知道函数是否是MethodInfo中的Expression-bodied成员

May*_*ank 1 c# c#-6.0

有没有办法知道函数是否是MethodInfo中的表达式?

Dav*_*idG 5

扩展我的评论和进一步的@SLAks答案......

表达身体的成员只是语法糖,他们编译成相同的代码.例如,考虑这个类:

public class Blah
{
    public void Foo() { Console.WriteLine("Hello"); }
    public void Bar() => Console.WriteLine("Hello");
}
Run Code Online (Sandbox Code Playgroud)

生成的IL看起来像这样,除了nop(在调试模式下编译的副作用),它们是相同的:

Blah.Foo:
IL_0000:  nop         
IL_0001:  ldstr       "Hello"
IL_0006:  call        System.Console.WriteLine
IL_000B:  nop         
IL_000C:  ret         

Blah.Bar:
IL_0000:  ldstr       "Hello"
IL_0005:  call        System.Console.WriteLine
IL_000A:  nop         
IL_000B:  ret   
Run Code Online (Sandbox Code Playgroud)

  • 在调试时编译时,`nop`通常表示括号(这是为了调试器使用).他们在发布模式下得到了优化. (2认同)