Одна вещь, которая прослушивала меня с обработкой исключений, исходящей от Python до C#, заключается в том, что в C# не существует способа указать условие else. Например, в Python я мог бы написать что-то вроде этого (примечание, это просто пример, я не спрашиваю, что это лучший способ, чтобы прочитать файл.):C# try-catch-else
try
{
reader = new StreamReader(path);
}
catch (Exception)
{
// Uh oh something went wrong with opening the file for reading
}
else
{
string line = reader.ReadLine();
char character = line[30];
}
Из того, что я видел в большинстве C# код люди будут просто написать следующее:
try
{
reader = new StreamReader(path);
string line = reader.ReadLine();
char character = line[30];
}
catch (Exception)
{
// Uh oh something went wrong, but where?
}
Проблема в том, что я не хочу, чтобы поймать из исключения диапазона, поступающего из того, что первая строка в файле не может содержать более 30 персонажи. Я хочу только перехватывать исключения, связанные с чтением файлового потока. Есть ли подобная конструкция, которую я могу использовать в C# для достижения того же?
Я удивлен, что никто не придумал ответ с указанием goto! –
catching general Исключения никогда не являются хорошей идеей, но вы можете указать, какие типы исключений пойманы. –
Я предполагаю, что я не уточнил исходный вопрос, но то, что я получаю, - это то, что я не хочу маскировать ошибки в разделе try {}, улавливая их и позволяя программе продолжить свой путь. Я бы предпочел, чтобы он разбился, чтобы сразу исправить ошибку. Хотя он также способен обрабатывать случаи, которые не поддаются контролю (т. Е. Файл отсутствует или не имеет к нему доступа, поскольку он находится на сетевом диске и т. Д.).Большинство решений предлагают ловить IOException, но что, если StreamReader выбрасывает какой-либо другой тип исключения, который я, возможно, не ожидал? –