[.NET 4] выкидывание переменных - баг или фича
От: samius Япония http://sams-tricks.blogspot.com
Дата: 25.06.10 13:29
Оценка:
Всем привет.
Есть логика, построенная на сайдэффектах от инициализации переменных. С переходом на .NET 4 она перестала отрабатывать в релизе.

    class Base
    {
        public Base()
        {
            Console.WriteLine("Base constructed.");
        }
        public static string BaseStaticString;

        public static string SideEffect(string str)
        {
            return BaseStaticString = str;
        }
    }

    class Derived : Base
    {
        public static string DerivedStaticString = SideEffect("A"); // Выкидывается в релизе
    }

    class Program
    {
        static void Main(string[] args)
        {
            Activator.CreateInstance(typeof (Derived));
            Console.WriteLine(Base.BaseStaticString);
            Console.WriteLine("done.");
            Console.ReadKey();
        }
    }


Где можно почитать о выкидывании инициализаторов переменных со включенной оптимизацией в .NET 4? Случилось так, что выкинуты инициализаторы используемых переменных, но это у меня пока не получается смоделировать в небольшом примере.

В качестве воркэраунда помог перенос инициализаторов в статический конструктор.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.