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: