Запретить Visual Studio 2019 постоянно оценивать toString()

#c# #visual-studio #visual-studio-2019

#c# #visual-studio #visual-studio-2019

Вопрос:

Чтобы воспроизвести мою проблему:

  1. Вставьте следующий код в новое консольное приложение C # .NET Framework в Visual Studio 2019.
  2. Поставьте точку останова в строке _Bar = null
  3. Начать отладку
  4. В точке останова наведите указатель _Bar мыши, чтобы просмотреть ее значение
  5. Шаг за
  6. Шаг за
  7. Генерируется исключение

Похоже, что Visual Studio постоянно оценивает ToString() метод, в результате _Bar чего всегда имеет значение FooBar , несмотря на его установку null . Есть ли способ остановить это? Проблема не воспроизводима в Visual Studio 2013. Я использую Visual Studio Community 2019 версии 16.0.1.

     using System;

    namespace FooBar {
        class Program {
            static void Main(string[] args) {
                new Foo();
            }

            class Foo {
                string _Bar;
                public string Bar {
                    get {
                        if (_Bar == null) {
                            _Bar = "FooBar";
                        }
                        return _Bar;
                    }
                    set {
                        _Bar = value;
                    }
                }

                public Foo() {
                    _Bar = null;
                    if (_Bar != null) {
                        throw new Exception("_Bar is not null.");
                    }
                }

                public override string ToString() {
                    return Bar;
                }
            }
        }
    }
  

Комментарии:

1. каждый раз, когда вы получаете _Bar, вы устанавливаете для него значение foobar, если оно равно null.

2. @Scriven Это верно для Bar , но не _Bar

3. «Похоже, Visual Studio постоянно оценивает метод toString()» — вы уверены, что это не просто оценка свойства Bar в окне просмотра? По сути, это проблема с включением побочных эффектов в средства получения свойств…

4. VS считает, что средства получения свойств не имеют побочных эффектов, следовательно, оценивает их. И это не делает этого для методов.

5. @JonSkeet Вы правы, у меня не было окна просмотра, автоматически отображаемого в предыдущей версии Visual Studio. Удаление объекта из списка наблюдения в VS2019 сделало свое дело

Ответ №1:

Решение проблемы — отключить оценку свойств в общих параметрах отладки

введите описание изображения здесь

Редактировать: другое решение проблемы, если у вас нет окна просмотра со свойством в нем.