некорректно отображаются исключения

 
0
 
.NET
ava
gypehot19 | 08.12.2016, 16:36
Обрабатываю исключения на ввод: чтоб входное значение подходило под тип int (по типу и по значению) и не было равно 0
Третье исключение отображается как положено, а вместо первых двух выдает стандартное исключение, не то, которое я прописала
как быть, может кто подскажет?

try
            {
                Console.WriteLine("здесь ввод");
                string input = Console.ReadLine();
                if (Convert.ToInt32(input) > int.MaxValue || Convert.ToInt32(input) < int.MinValue)
                    throw new Exception("первое исключение");
                if (!Int32.TryParse(input, out numerator))
                    throw new Exception("второе исключение");
                if (Convert.ToInt32(input) == 0)
                    throw new Exception("третье исключение");
            }
            catch (Exception ex)
            {
                numerator = rand.Next(1, 30);
                Console.WriteLine(ex.Message + "\nзаменим на это: " + numerator);
            }
Ответы (9)
ava
chupachups | 09.12.2016, 14:25 #
если исключение возникает в 5-ой строке, то абсолютно не важно что написано в 6-ой строке - сразу идет переход в блок catch
ava
gypehot19 | 09.12.2016, 15:02 #
а как сделать, чтоб он писал именно то, что происходит в 6 строке?
ибо если исключение возникает в 9 строке, то он сначала пишет то, что в 10, а потом уже переходит к catch
ava
chupachups | 09.12.2016, 17:41 #
до 10-ой строки доходит лишь потому что было введено число, а не что попало, которое отсеивается исключением в 5-ой строке
по правильному надо сперва использовать Int32.TryParse а уже потом без всяких Convert.ToInt32 (уже ведь пропарсили) сравнивать на допустимость интервалов
но Int32.TryParse не пройдет если ввод выходит за интервал Int32

а если задача стоит только лишь в том, чтобы научиться отлавливать исключения, то нужно просто первое условие заключить в try-catch, типа того:

try
{
    Console.WriteLine("здесь ввод");
    string input = Console.ReadLine();
    try
    {
        if (Convert.ToInt32(input) > int.MaxValue || Convert.ToInt32(input) < int.MinValue)
            throw new Exception("первое исключение");
    }
    catch
    {
        throw new Exception("первое исключение");
    }
    if (!Int32.TryParse(input, out numerator))
        throw new Exception("второе исключение");
    if (Convert.ToInt32(input) == 0)
        throw new Exception("третье исключение");
}
catch (Exception ex)
{
    numerator = rand.Next(1, 30);
    Console.WriteLine(ex.Message + "\nзаменим на это: " + numerator);
}
ava
gypehot19 | 12.12.2016, 00:34 #
спасибо! логику суждений уловила, поняла как исправить)
ava
Angel_666 | 09.12.2016, 23:29 (Отредактирован 09.12.2016 23:35) #
А не кого не учили, что исключения использовать только в крайних случаях????
и все входные параметры проверять перед выполнением??? 
ava
gypehot19 | 12.12.2016, 00:33 #
исключение - требование курсовой работы, мне оно к чертям не сдалось)
ava
Angel_666 | 09.12.2016, 23:32 (Отредактирован 09.12.2016 23:37) #
Если твой входящий параметр не подходит под нужный тип, не надо вызывать исключение, надо сразу написать else и сообщить "вы вели не коректнные данные"
ava
Angel_666 | 09.12.2016, 23:38 #
Не ищите приключение на свою 5 точку опоры! Включите логику!
ava
chupachups | 12.12.2016, 11:26 #
Отключите логику и включите мозг - если тема об исключениях и методах их отловки (читай "что такой try-catch-finally и с чем его едят"), то хоть об стену убейся, а заюзай это.
Хотите найти приключения на 5 точку - почитайте учебники для начальной школы, вот там действительно бред собачий - ни логики, ни мозга у составителей.
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить