Tentando entender as exceções em C #
Eu realmente não uso nenhuma tentativa / captura no meu código, mas estou tentando quebrar esse hábito e agora uso exceçõe
Eu acho que o lugar mais importante para tê-lo no meu aplicativo seria ler um arquivo e estou tentando implementá-lo agora, mas não tenho certeza das "melhores práticas" para fazê-lo. Atualmente estou fazendo algo assim:
private void Parse(XDocument xReader)
{
IEnumerable<XElement> person = xReader.Descendants("Person").Elements();
foreach (XElement e in person)
personDic[e.Name.ToString()] = e.Value;
if (personDic["Name"] == null || personDic["Job"] == null || personDic["HairColor"] == null)
throw new KeyNotFoundException("Person element not found.");
}
Mas não tenho certeza se isso está correto. Eu tenho isso para lidar com isso:
try
{
personsReader.Read(filename, persons);
}
catch (KeyNotFoundException e)
{
MessageBox.Show(e.Message);
return;
}
// Do stuff after reading in the file..
No entanto, ao mostrar o e.Message, ele apenas mostra a mensagem de erro genérica KeyNotFoundException e não por mensagem de erro personalizada. Também não tenho certeza se, em geral, estou tratando de todo esse "problema de manipulação de exceção" corretamente. Volto na captura porque, se o arquivo não for lido com êxito, obviamente, quero apenas fingir que o usuário nunca tentou abrir um arquivo e deixá-lo tentar novamente com outro arquiv
Estou fazendo isso corretamente? Novamente, sou bastante novo no uso de exceções e quero ter certeza de que o resolvi antes de continuar e aplicar isso ao restante do meu program
Além disso, por que as pessoas dizem para não fazercatch (Exception e)
? Parece que, nesse caso, eu gostaria de fazer isso porque, independentemente do erro que ocorre ao ler em um arquivo, se houver um erro, desejo parar de ler o arquivo, exibir a mensagem de erro e retornar. Não seria sempre assim? Eu posso entender que não quero lidar com a exceção e se você quiser lidar com algo diferente com base na exceção, mas, neste caso, eu não gostaria de lidar apenas com a classe de exceção básica, caso algo dê errado?