He leído muchos artículos (y un par de otras preguntas similares que se publicaron en StackOverflow) sobre cómo y cuándo usar afirmaciones, y las entendí bien. Pero aún así, no entiendo qué tipo de motivación debería llevarme a usar en Debug.Assert
lugar de lanzar una simple excepción. Lo que quiero decir es que en .NET la respuesta predeterminada a una afirmación fallida es "detener el mundo" y mostrar un cuadro de mensaje al usuario. Aunque este tipo de comportamiento podría modificarse, me resulta muy molesto y redundante hacer eso, mientras que podría, en cambio, lanzar una excepción adecuada. De esta manera, podría escribir fácilmente el error en el registro de la aplicación justo antes de lanzar la excepción y, además, mi aplicación no necesariamente se congela.
Entonces, ¿por qué debería usar, en todo caso, en Debug.Assert
lugar de una simple excepción? Colocar una aserción donde no debería estar podría causar todo tipo de "comportamiento no deseado", así que desde mi punto de vista, realmente no gano nada usando una aserción en lugar de lanzar una excepción. ¿Estás de acuerdo conmigo o me falta algo aquí?
Nota: Entiendo completamente cuál es la diferencia "en teoría" (Depurar vs Liberar, patrones de uso, etc.), pero como yo lo veo, sería mejor lanzar una excepción en lugar de realizar una afirmación. Dado que si se descubre un error en una versión de producción, todavía querría que la "aserción" fallara (después de todo, la "sobrecarga" es ridículamente pequeña), así que será mejor lanzar una excepción en su lugar.
Editar: A mi modo de ver, si una afirmación falló, eso significa que la aplicación entró en algún tipo de estado dañado e inesperado. Entonces, ¿por qué querría continuar con la ejecución? No importa si la aplicación se ejecuta en una versión de depuración o de lanzamiento. Lo mismo vale para ambos