Почему отладчик VS2005 не сообщает о «базе». значения правильно? (было «Почему это, если утверждение не удается?») - PullRequest
0 голосов
/ 16 апреля 2010

Я работаю над существующим классом, который состоит из двух шагов, полученных из поля System.Windows.Forms.Combo.

Класс переопределяет свойство Text следующим образом:

    public override string Text
    {
        get
        {
            return this.AccessibilityObject.Value;
        }
        set
        {
            if (base.Text != value)
            {
                base.Text = value;
            }
        }
    }

Причиной этого "get" является ошибка MS: http://support.microsoft.com/kb/814346

Однако меня больше интересует тот факт, что «если» не работает.

Бывают случаи, когда «base.Text! = Значение» имеет значение true, и, тем не менее, нажатие клавиши F10 приводит к закрытию} «набора», и свойство Text не изменяется.

Я видел это как путем проверки значений в отладчике, так и установки условной точки останова, которая прерывается только тогда, когда предикат оператора «if» равен true.

Как же "если" может пойти не так?

Класс между этим и ComboBox не касается свойства Text. Вышеприведенная ошибка не должна ни на что влиять - она ​​говорит, что она исправлена ​​в VS2005. Отладчик показывает значения, отличные от того, что видит сама программа?

Обновление

Мне кажется, я нашел, что здесь происходит.

Отладчик неправильно сообщает значение (включая неправильную оценку условных точек останова). Чтобы увидеть это, попробуйте следующую пару классов:

class MyBase
{
    virtual public string Text
    {
        get
        {
            return "BaseText";
        }
    }
}

class MyDerived : MyBase
{
    public override string Text
    {
        get
        {
            string test = base.Text;
            return "DerivedText";
        }
    }
}

Установите точку останова в последнем операторе возврата, затем запустите код и получите доступ к этому свойству.

В моем VS2005 при наведении курсора на base.Text указывается значение «DerivedText», но для переменной test правильно установлено значение «BaseText».

Итак, новый вопрос: почему отладчик не обрабатывает базу должным образом, и как мне ее получить?

Ответы [ 2 ]

3 голосов
/ 16 апреля 2010

Используйте String.Compare для сравнения строк. Есть тонкости со строками. Я не могу сказать вам, почему if потерпел бы неудачу, кроме того, что ваши строки не могли бы быть «равными»

0 голосов
/ 19 апреля 2010

... и это почти завершает мой новый вопрос. Ах, хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...