请考虑以下示例代码.
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 );
}
}
Run Code Online (Sandbox Code Playgroud)
如果我使用Visual Studio 2010(在CSC编译器下)编译并在Debug下运行此代码,它将打印出以下结果:
Method is not static.
Value: 5
Run Code Online (Sandbox Code Playgroud)
如果我在Visual Studio 2010中编译相同的代码,但这次使用Release设置,将生成以下输出:
Method is static.
Value: 5
Run Code Online (Sandbox Code Playgroud)
现在,如果我们要使用Visual Studio 2015 CTP(在Roslyn编译器下)执行相同的代码,则会为Debug和Release设置生成以下输出:
Method is not static.
Value: 5
Run Code Online (Sandbox Code Playgroud)
首先,我发现很奇怪VS2010(CSC)的调试和发布版本之间存在差异.为什么它不会在调试时作为静态方法进行评估?此外,似乎在某些情况下,它在Debug中编译时会评估为静态.我有一个生产应用程序在Debug下获得预期的静态结果.
其次,Roslyn编译器是否应该在这种特殊情况下匹配CSC的行为?
归档时间: |
|
查看次数: |
1260 次 |
最近记录: |