每次调用方法时Func都会编译吗?

Ole*_*yta 1 c# func

例如,我有一个func里面的方法:

private void Method()
{
    Func<int, string> myFunc => (int) { return int.ToString();}
    var res = myFunc(42);
}
Run Code Online (Sandbox Code Playgroud)

Func将被编译1次或每次调用方法时?

如果你有这样的话,也请分享一些链接,因为这是一种争论

Den*_*nis 5

看起来你是混乱的表达:

Expression<Func<int, string>> myFuncExpr = someInt => someInt.ToString();
Run Code Online (Sandbox Code Playgroud)

和代表们:

Func<int, string> myFunc = someInt => someInt.ToString();
Run Code Online (Sandbox Code Playgroud)

当使用lambdas时,它们具有类似的声明语法,但在调用之前,表达式树将不会编译为委托myFuncExpr.Compile().每次调用时Compile,编译都会发生,因为表达式树是一种表示代码的方式(特别是C#代码),而不是代码本身.

另一方面,委托将使用程序集中的其余源代码编译一次.从编译器的角度来看,lambda只是声明方法体的另一种方式,即代码本身.因此,没有任何理由以不同的方式编译它.