Это очень опасно, поэтому я задаюсь вопросом, почему это разрешено. Поскольку мне часто приходится переключаться между VB.NET и С#, я иногда добавляю условия точки останова, например следующее:
foo = "bah"
Я хочу остановиться, если переменная string
foo
равна "bah
, поэтому правильным способом было использовать foo == "bah"
вместо foo = "bah"
.
Но он "работает". Вы не получаете никаких предупреждений или ошибок во время компиляции или выполнения. Но на самом деле это изменяет переменную foo
, она делает ее всегда "bah"
, даже если она имела другое значение. Так как это происходит тихо (точка останова никогда не попадает), это невероятно опасно.
Почему это разрешено? Где моя ошибка в рассуждении (кроме путаницы синтаксиса С# и VB.NET)? В С# (в отличие от VB.NET) оператор присваивания возвращает значение, которое было назначено, а не bool
, но string
в этом случае. Но условие точки останова должно быть bool
, если вы установите флажок "Истина".
Вот небольшой пример "программы" и скриншоты из моей (немецкой) среды IDE:
static void Main()
{
string foo = "foo";
// breakpoint with assignment(foo = "bah") instead of comparison(foo == "bah"):
Console.WriteLine(foo); // bah, variable is changed from the breakpoint window
}
Диалог состояния точки останова:
Код как изображение, включая точку останова: