C # equivalente a captura de VB.NET ... Quando
-
05-07-2019 - |
Pergunta
Em VB.NET Costumo Catch…When
:
Try
…
Catch e As ArgumentNullException When e.ParamName.ToUpper() = "SAMPLES"
…
End Try
Existe um C # equivalente a Catch…When
?
Eu não quero recorrer ao uso de uma declaração if
dentro de um catch
se possível.
Solução
Esta funcionalidade foi anunciado para C # 6. Agora é possível escrever
try { … }
catch (MyException e) when (myfilter(e))
{
…
}
Você pode baixar o preview do Visual Studio 2015 agora de verificar isso, ou aguardar o lançamento oficial.
Outras dicas
Não há equivalente a Catch…When
em C #. Você realmente vai ter que recorrer a uma declaração if
dentro de sua catch
, então relançar se sua condição não for cumprida:
try
{
…
}
catch (ArgumentNullException e)
{
if ("SAMPLES" == e.ParamName.ToUpper())
{
… // handle exception
}
else
{
throw; // condition not fulfilled, let someone else handle the exception
}
}
Isso não vai recriar a mesma semântica do VB pegar quando expressão. Há uma diferença fundamental. A VB Quando a expressão é executada antes de ocorrer o desenrolar pilha. Se você fosse para examinar a pilha no ponto de quando o filtro, você realmente ver o quadro onde a exceção foi lançada.
Ter um caso no bloco catch é diferente porque as executa o bloco capturas após a pilha é desenrolado. Isto é especialmente importante quando se trata de Relatório de Erros. No cenário VB você tem a capacidade de deixar de funcionar com um rastreamento de pilha, incluindo o fracasso. Não é possível obter esse comportamento em C #.
EDIT:
detalhado post sobre o assunto.