gpt4 book ai didi

c# - CSC 和 Roslyn 编译器的静态 lambda 表达式评估的区别?

转载 作者:太空狗 更新时间:2023-10-29 21:04:34 24 4
gpt4 key购买 nike

考虑以下示例代码。

class Program
{
static void Main( string[] args )
{
DoSomethingWithAction( i =>
{
Console.WriteLine( "Value: {0}", i );
} );

Console.ReadLine();
}

private static void DoSomethingWithAction( Action<int> something )
{
Console.WriteLine( something.Target == null
? "Method is static."
: "Method is not static." );

something( 5 );
}
}

如果我使用 Visual Studio 2010(在 CSC 编译器下)在 Debug 下编译并运行此代码,它将打印出以下结果:

Method is not static.
Value: 5

如果我在 Visual Studio 2010 中编译相同的代码,但这次使用 Release 设置,将生成以下输出:

Method is static.
Value: 5

现在,如果我们要执行相同的代码,但这次使用 Visual Studio 2015 CTP(在 Roslyn 编译器下),则会为 DebugRelease 设置:

Method is not static.
Value: 5

首先,我对 VS2010 (CSC) 的调试版和发布版之间存在差异感到好奇。 为什么它在调试时不评估为静态方法?此外,在某些情况下,在调试中编译时它似乎确实评估为静态方法。我有一个生产应用程序在调试下获得预期的静态结果。

其次,在这种特殊情况下,Roslyn 编译器是否应该匹配 CSC 的行为?

最佳答案

这是 Roslyn 团队有意做出的更改。

委托(delegate)指向实例方法的调用速度稍快一些,因此 Roslyn 现在将 lambda 编译为实例方法,即使在不需要时也是如此。

参见 discussion .

关于c# - CSC 和 Roslyn 编译器的静态 lambda 表达式评估的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31408767/

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