#c# #visual-studio #visual-studio-2019
#c# #visual-studio #visual-studio-2019
Вопрос:
Чтобы воспроизвести мою проблему:
- Вставьте следующий код в новое консольное приложение C # .NET Framework в Visual Studio 2019.
- Поставьте точку останова в строке
_Bar = null
- Начать отладку
- В точке останова наведите указатель
_Bar
мыши, чтобы просмотреть ее значение - Шаг за
- Шаг за
- Генерируется исключение
Похоже, что 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 сделало свое дело