C# - пустой указатель по сравнению с “Не мог оценить выражение”

У меня есть код как это:

    private Box mCurBox;

    public Box CurBox
    {
        get { return mCurBox; }
        set
        {
            if (mCurBox != value)
            {
                mCurBox = value;
            }
        }
    }

Когда mCurBox является пустым затем CurBox отладчик говорит, "Не мог быть оценен". Если это знает, что значение внизу является нулевым затем, каким образом это не может понять это?

6
задан Vaccano 21 April 2010 в 21:01
поделиться

2 ответа

Это потому, что вы не определили mCurBox как что-либо по умолчанию, поэтому компилятор помечает это как неопределенное поведение.
Вам нужно инициализировать mCurBox как null, либо в той же строке, в которой вы его определяете, либо в конструкторе.
В общем, рекомендуется инициализировать ссылочные типы равными нулю, если вы не присваиваете им что-либо при их определении.
Кроме того, поскольку вы просто назначаете и извлекаете, вы можете легко использовать автоматические свойства.

7
ответ дан 10 December 2019 в 02:44
поделиться

Время от времени отладчик может стать неуклюжим. Но ожидаемый случай получения сообщения «Не удалось оценить» - это сборка выпуска. Такие простые свойства оптимизируются компилятором JIT. Код получения свойства даже не будет присутствовать.

2
ответ дан 10 December 2019 в 02:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: