Por que a condição de ponto de interrupção do depurador permite uma instrução de atribuição como condição de bool?

Isso é muito perigoso, então eu me pergunto por que é permitido. Como muitas vezes preciso alternar entre VB.NET e C #, às vezes adiciono condições de ponto de interrupção como as seguintes:

foo = "bah"

Eu quero parar se ostring variávelfoo é"bah, então a maneira correta era usarfoo == "bah" ao invés defoo = "bah".

Mas isso "funciona". Você não recebe avisos ou erros no momento da compilação ou do tempo de execução. Mas na verdade issomodifica a variávelfoo, faz sempre"bah" mesmo que tivesse um valor diferente. Como isso acontece silenciosamente (o ponto de interrupção nunca é atingido), é incrivelmente perigoso.

Por que isso é permitido? Onde está meu erro de raciocínio (além de confundir a sintaxe C # e VB.NET)? Em C # (em oposição ao VB.NET), umdeclaração de atribuição retorna o valor que foi atribuído, portanto, não umbool, mas umstring nesse caso. Mas uma condição de ponto de interrupção deve ser umabool se você marcar a caixa"É verdade".

Aqui está um pequeno exemplo de "programa" e capturas de tela do meu IDE (alemão):

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
}

O diálogo de condição do ponto de interrupção:

O código como imagem, incluindo o ponto de interrupção:

questionAnswers(2)

yourAnswerToTheQuestion