Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > исключение в try...catch


Автор: AlexLogos 25.10.2010, 11:57
Здравствуйте. Как мне сделать так чтоб при возникновении исключения в блоке try...catch цикл продолжал выполнение?
Код

while ...
{
    try
    {
    //тут код
    }
    catch {}
}
 
как только возникает исключение цикл прерывается.

Автор: CYBERDREAM 25.10.2010, 12:03
Приветствую. странно но не должен. Дай весь код

Автор: AlexLogos 25.10.2010, 12:17
если не должен то пока попробую другую проблемку решить. может она и есть загвоздка. спасибо.

Автор: Yagmort 26.10.2010, 14:49
Используй вместо while () do 
синтаксис
при этом условие написанное в операторе do выполнится хотябы 1 раз 
Код

 do 
()
while()

try и cath созданы для того чтобы бы остановить программу при возникновении ошибки 

и синтаксис такой 

Код

try
{}
cath ()
{}
finally //он будет выполнятся всегда 
{}

попробуй функцией передать в блок while параметр а функцию вызывай в операторе finally. Может и прокатит, не пробовал не знаю.




Автор: gambit 26.10.2010, 16:38
Цитата(Yagmort @  26.10.2010,  14:49 Найти цитируемый пост)
Используй вместо while () do 
синтаксис
при этом условие написанное в операторе do выполнится хотябы 1 раз 
код C#
 do 
()
while()

try и cath созданы для того чтобы бы остановить программу при возникновении ошибки 

и синтаксис такой 

код C#
try
{}
cath ()
{}
finally //он будет выполнятся всегда 
{}


шикарный ответ на поставленный вопрос

Автор: CYBERDREAM 26.10.2010, 16:51
а я то боялся что только я так подумал ))

Автор: gambit 26.10.2010, 16:59
Цитата(AlexLogos @  25.10.2010,  12:17 Найти цитируемый пост)
может она и есть загвоздка. спасибо. 

А если дело не там, то посмотри данную модель:
Код

            try
            {
                for (int i = 0; i < 20; i++)
                {
                    try
                    {
                        Console.WriteLine(i.ToString());

                        if (i == 4)
                        {
                            throw new ArgumentException();
                        }

                        if (i == 9)
                        {
                            throw new Exception();
                        }
                    }
                    catch (ArgumentException)
                    {
                        Console.WriteLine("Ошибка");
                    }
                }
            }
            catch
            {
                Console.WriteLine("Мега ошибка");
            }


в данном коде на 4 итерации происходит ошибка которая здесь же и обрабатывается, после обработки цикл продолжается, а на 9 появляется ошибка которая в данном try не обработана, она обрабатывается выше, и в цикл уже не возвращается.

Автор: Mephisto 27.10.2010, 18:40
OMG!!! 
Yagmort, долго пытался понять твой ответ.

gambit, в примере catch без параметра. Так что там либо goto закрался какой, либо полнолуние меняет направление потока электронов в процессоре. В противном случае выхода из цикла быть не должно.

Автор: gambit 28.10.2010, 09:43
есть цикл, в нем try который ловит ArgumentException, на 4 шаге, кидается ArgumentException и тут же обрабатывается, после чего цикл продолжается. На 9 шаге кидается Exception, идем в блок catch и видим что здесь мы его обработать не можем, ищем выше по стеку catch который может обработать такую ошибку, для этого должен быть

catch (Exception)
{

}
или c# позволяет не писать конкретную ошибку в скобках, тогда считается что будет ловится Exception, вот мы выше по стеку и обнаруживаем такой блок, заходим в него, обрабатываемся, и все, назад по стеку мы уже не пойдем, только вперед. А впереди в данном случае ничего нет.
Так что все логично.

Цитата(Mephisto @  27.10.2010,  18:40 Найти цитируемый пост)
gambit, в примере catch без параметра.

про это написал.
Цитата(Mephisto @  27.10.2010,  18:40 Найти цитируемый пост)
Так что там либо goto закрался какой

брррр, не переношу этого слова
Цитата(Mephisto @  27.10.2010,  18:40 Найти цитируемый пост)
либо полнолуние меняет направление потока электронов в процессоре

не очень шутка удалась.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)