2010-04-16 3 views
0

Я работаю над существующим классом, который состоит из двух шагов, полученных из окна System.Windows.Forms.Combo.Почему отладчик VS2005 не сообщает «базу». значения правильно? (было «Почему это утверждение if не работает?»)

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

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

В качестве причины для этого «получить» это ошибка MS: http://support.microsoft.com/kb/814346

Однако, я больше заинтересован в том, что " если "не работает.

Бывают случаи, когда значение "base.Text! = Value" истинно и при этом нажимает F10 до закрытия} "set", а свойство Text не изменяется.

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

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

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

Update

Я думаю, что я нашел то, что происходит здесь.

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

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», но переменная-проверка была правильно установлена ​​на «BaseText».

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

+0

Можете ли вы предоставить простую, автономную программу, которая демонстрирует проблему? Это происходит только на оптимизированных сборках или в отладочных сборках? Какие версии среды выполнения VS и .NET вы используете? –

+0

Это в VS2005 с использованием .NET 2.0. Это происходит в отладочных сборках. Я уберу программу до основ и отправлю ее, если она все еще случится. – Rawling

+0

К сожалению, этого не происходит, если я копирую класс в новый проект, поэтому я сомневаюсь, что я получу ответ, связанный с моим конкретным классом :) Однако, если у кого есть указатели на то, когда значения, наблюдаемые в отладчике, похоже, соответствуют тем, которые видят в программе, они приветствуются. – Rawling

ответ

0

... и this примерно обертывает мой новый вопрос. Ах хорошо.

3

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

+0

Те же результаты, что и в String.Compare - строковые значения в отладчике выглядят одинаково, а String.Compare, оцененный в отладчике, может возвращать ненулевое значение, но оператор if (if (0! = System.String.Compare (base. Текст, значение))), похоже, не работает должным образом. – Rawling

Смежные вопросы