¿Por qué la condición de punto de interrupción del depurador permite una instrucción de asignación como condición bool?

Esto es muy peligroso, así que me pregunto por qué está permitido. Como a menudo necesito cambiar entre VB.NET y C #, a veces agrego condiciones de punto de interrupción como las siguientes:

foo = "bah"

Quiero parar si elstring variablefoo es"bah, entonces la forma correcta era usarfoo == "bah" en lugar defoo = "bah".

Pero funciona". No recibe ninguna advertencia o error en tiempo de compilación o tiempo de ejecución. Pero en realidad estomodifica La variablefoolo hace siempre"bah" incluso si tuviera un valor diferente. Dado que eso sucede en silencio (el punto de interrupción nunca es alcanzado) es increíblemente peligroso.

¿Por qué está permitido? ¿Dónde está mi error de razonamiento (además de confundir la sintaxis de C # y VB.NET)? En C # (a diferencia de VB.NET) unsentencia de asignación devuelve el valor asignado, por lo que no es unbool, pero unstring en este caso. Pero una condición de punto de interrupción tiene que ser unbool si marcas la casilla"Es verdad".

Aquí hay un pequeño "programa" de muestra y capturas de pantalla de mi IDE (alemán):

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
}

El cuadro de diálogo condición de punto de interrupción:

El código como imagen, incluido el punto de interrupción:

Respuestas a la pregunta(2)

Su respuesta a la pregunta