Eu li muitos artigos (e algumas outras perguntas semelhantes que foram postadas no StackOverflow) sobre como e quando usar asserções e as entendi bem. Mesmo assim, não entendo que tipo de motivação deveria me levar a usar em Debug.Assert
vez de lançar uma exceção simples. O que quero dizer é que, no .NET, a resposta padrão a uma declaração com falha é "parar o mundo" e exibir uma caixa de mensagem para o usuário. Embora esse tipo de comportamento possa ser modificado, acho altamente irritante e redundante fazer isso, enquanto eu poderia, em vez disso, apenas lançar uma exceção adequada. Dessa forma, eu poderia facilmente gravar o erro no log do aplicativo antes de lançar a exceção e, além disso, meu aplicativo não necessariamente congela.
Então, por que eu deveria, se fosse, usar em Debug.Assert
vez de uma exceção simples? Colocar uma asserção onde não deveria estar poderia causar todos os tipos de "comportamento indesejado", então, no meu ponto de vista, eu realmente não ganho nada usando uma asserção em vez de lançar uma exceção. Você concorda comigo ou estou faltando alguma coisa aqui?
Nota: Eu entendo perfeitamente qual é a diferença "em teoria" (Depurar versus Liberar, padrões de uso etc.), mas a meu ver, seria melhor lançar uma exceção em vez de executar uma declaração. Visto que se um bug for descoberto em uma versão de produção, eu ainda quero que a "asserção" falhe (afinal, a "sobrecarga" é ridiculamente pequena), então seria melhor lançar uma exceção.
Edit: A meu ver, se uma declaração falhou, isso significa que o aplicativo entrou em algum tipo de estado corrompido e inesperado. Então, por que eu iria querer continuar a execução? Não importa se o aplicativo é executado em uma versão de depuração ou lançamento. O mesmo vale para ambos