Fiquei em dúvida sobre o uso do throw; pois ele lanca uma exceção? para qual catch? que tipo de exceção? realmente não compreendi direito o throw; (porém o throw new <objeto da exceção> eu entendi direitinho)
Fiquei em dúvida sobre o uso do throw; pois ele lanca uma exceção? para qual catch? que tipo de exceção? realmente não compreendi direito o throw; (porém o throw new <objeto da exceção> eu entendi direitinho)
O Throw repassa a exceção, ou seja, delega a responsabilidade de tratar para o proximo da fila
try { Metodo(); } catch(ArgumentNullException ex) { throw; } catch(ArgumentException ex) { Console.WriteLine(ex.Message);
} //com esse exemplo o throw repassaria a excessao para o ArgumentException?
Throw = do inglês lançar
Quando um Throw; é chamado ele simplesmente pega a exception capturada no catch e lança para o método que a chamou
Se o método que chamou não estiver dentro de um bloco try, essa Exception será lançada para o usuário.
Uma outra possibilidade quando se cai em um bloco catch é criar uma nova Exception e lança-la. Daí vc utiliza o throw new QlqrException();
Isto posto, peguei um código pronto lá na doc do C# pra tentar ilustrar:
using System;
namespace Throw
{
public class Sentence
{
public Sentence(string s)
{
Value = s;
}
public string Value { get; set; }
public char GetFirstCharacter()
{
try
{
return Value[0];
}
catch (NullReferenceException e)
{
throw;
}
}
}
Observe o código acima e pense na seguinte utilização:
public class Example
{
public static void Main()
{
var s = new Sentence(null);
Console.WriteLine($"The first character is {s.GetFirstCharacter()}");
}
}
O que ocorre?
na chamada de s.GetFirstCharacter() o método encontra uma NullReferennceException e simplesmente lança essa Exception para o método que o chamou (O Main) como não há tratativa alguma ali, o Main estoura a pilha de execução e lança a Exception para o usuário:
Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object.
at Sentence.GetFirstCharacter()
at Example.Main()
segue link da documentação oficial: https://learn.microsoft.com/pt-br/dotnet/csharp/language-reference/keywords/throw