Это очень опасно, поэтому я задаюсь вопросом, почему это разрешено. Поскольку мне часто приходится переключаться между 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
}
Диалог состояния точки останова:

Код как изображение, включая точку останова:
