Pergunta

Recentemente, fez a declaração a um colega que:

NullReferenceExceptions deve não ser explicitamente pego

Eu usei a palavra nunca mais .... hmmm. Eu nunca vi um caso de uso apropriado me para pegá-los, mas eu queria ver se alguém tem?

Nunca é uma palavra forte depois de tudo .....

Foi útil?

Solução

Depende porquê; ver de Eric Lippert blogue entrada . Se eles são "exceções boneheaded", então nenhum - apenas corrigir o código de chamada. No caso raro que eles são "exceções irritante" (ou seja, o código que você está chamando tem armadilhas que são difíceis de evitar), então eu acho que você tem que.

Outras dicas

Bem, quando você põe em uma biblioteca de terceiros de buggy que ocasionnaly provoca nullrefs, é provavelmente uma boa idéia para pegá-los se você souber como lidar adequadamente com eles.

exemplo da vida real: No passado, eu usei bastante extensa um datagrid fornecido por um terceiro editor festa. Eles têm (ou tiveram neste momento) um bug confirmou que whould jogar um nullref (aninhada profunda na sua pilha de chamadas), de tempos em tempos quando atualizar alguns dados na fonte de dados subjacente.

Eu lidei com a situação com este código:

            try
            {
                // do the update
            }
            catch (NullReferenceException)
            {
                try
                {
                    // redo the update
                }
                catch (NullReferenceException ex)
                {
                    // properly log the third party lib failure
                }
            }

Btw, o meu código "log" nunca executado em 2 anos :) Agora, o editor terceiro tenha corrigido o problema, e eu provavelmente deve remover esse código.

Talvez a citação correta é

NullReferenceExceptions não deve nunca ser explicitamente pego se você possui o código que jogado a Exceção

Você tem razão, "nunca" é uma palavra forte.

Pegar um NullReferenceException (ou um NPE para Java), sempre dependerá da finalidade do código.

Por exemplo, se sua aplicação requer que o processamento continuar mesmo com o estado potencialmente incerta (acho que os sistemas de suporte de vida) ou se o seu código não se preocupa com o estado do objeto referenciado (ex: dados de processamento em lote que joga fora, literalmente , dados ruins).

É uma boa regra de ouro para não pegar esses tipos de exceções, mas não uma lei.

Eu não diria que não. Por exemplo, você pode pegá-lo para registrar a exceção ou para empacotá-lo de um segmento para outro. Em ambos os casos a exceção deve ser jogar novamente.

Como pontos Marc Gravell fora Eric Lippert tem uma boa entrada em seu blog sobre exceções.

Uma vez eu tive que construir uma grande corda com base nos valores de 15 ou mais variáveis. Em vez de verificar cada um para nullness, eu simplesmente fui e criou a corda, dereferencing as variáveis, e pegar o NRE. Para ser honesto, se sentiu mal e impertinente, mas salvou-me de escrever um monte de código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top