Причудливое поведение тернарного оператора в отладчике на платформе x64

Я использую очень простое тернарное выражение в моем коде на C #:

helperClass.SomeData = helperClass.HasData ? GetSomeData() : GetSomeOtherData();

В обоих случаях функции на каждом пути выражения возвращают не -null, но если я посмотрю на результат в отладчике, он будет нулевым, пока я не укажу на него в коде, например, используя assert:

Debug.Assert(helperClass.SomeData != null);

Это происходит только в том случае, если я использую «x64» или «Any CPU "настройка платформы в режиме отладки. Это нормально в режиме "x86".

Я стараюсь быть очень осторожным, прежде чем предполагать, что обнаружил ошибку в компиляторе или отладчике, но я не могу найти другого объяснения этому поведению.

Вот полный текст класс, чтобы выполнить воспроизведение, просто вызовите SomeClass.SomeAction () в отладчике в режиме x64 и просмотрите его:

public class SomeClass {
    public bool HasData;
    public object SomeData;

    private SomeClass() {
        HasData = false;
    }

    public static void SomeAction() {
        var helperClass = new SomeClass();
        // Exhibits weird debugger behavior of having helperClass.SomeData = null after this line:
        helperClass.SomeData = helperClass.HasData ? GetSomeData() : GetSomeOtherData();

        // Note that trying helperClass.SomeData.ToString() returns a debugger error saying SomeData is null

        // But this code is just fine
        //if(helperClass.HasData) {
        //    helperClass.SomeData = GetSomeData();
        //} 
        //else {
        //    helperClass.SomeData = GetSomeOtherData();
        //}

        // In both cases though, after this line things are fine:
        Debug.Assert(helperClass.SomeData != null);
    }

    private static object GetSomeData() {
        return new object();
    }

    private static object GetSomeOtherData() {
        return new object();
    }
}

Я что-то упустил или это ошибка в отладчике x64? Я использую режим отладки, поэтому оптимизации не должно быть.

13
задан Jeff Moser 15 August 2011 в 15:59
поделиться