Por que capturar e relançar uma exceção em C#?
Olá, colegas! Sou novo em C# e frequentemente vejo em código alheio a construção try-catch, onde dentro do bloco catch simplesmente relançam a mesma exceção usando `throw;`. Isso me parece sem sentido — por que capturar um erro se você não o trata, apenas o lança novamente? Por que não deixar a exceção propagar sozinha?
Por exemplo, frequentemente encontro código assim:
```csharp
public void DoSomething()
{
try
{
// algum código perigoso
int result = 100 / 0;
}
catch (Exception ex)
{
// não fazemos nada, apenas relançamos
throw;
}
}
```
Na minha opinião, isso é o mesmo que simplesmente não envolver o código em try-catch. Afinal, se removermos o try-catch, a exceção ainda assim será lançada para fora. Mas se desenvolvedores experientes escrevem assim, deve haver algum sentido nisso? Talvez eu esteja perdendo algo? Expliquem, por favor, para que isso serve e quais são as armadilhas.
Também notei que às vezes escrevem `throw ex;` em vez de `throw;`. Isso é