Рассмотрим следующий пример кода.
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 );
}
}
Если я скомпилирую и запустил этот код под Debug с помощью Visual Studio 2010 (под компилятором CSC), он распечатает следующий результат:
Method is not static.
Value: 5
Если я скомпилирую тот же код в Visual Studio 2010, но на этот раз с помощью настроек Release будет создан следующий вывод:
Method is static.
Value: 5
Теперь, если бы мы должны были выполнить тот же код, но на этот раз с помощью Visual Studio 2015 CTP (в соответствии с компилятором Roslyn), следующий вывод создается как для Отладка, так и Release strong > :
Method is not static.
Value: 5
Во-первых, мне показалось любопытным, что существует разница между версиями отладки и выпуска VS2010 (CSC). Почему он не будет оцениваться как статический метод при отладке? Кроме того, похоже, что в некоторых случаях он оценивается как статический при компиляции в Debug. У меня есть производственное приложение, которое получает ожидаемый статический результат в Debug.
Во-вторых, должен ли компилятор Roslyn соответствовать поведению CSC в этом конкретном случае?