none
как сделать цикл RRS feed

  • Вопрос

  • private static void Main(string[] arg)
    ...
    try
    {
    ...
    }
    catch (Exception exc)
    {
    ...
    мне нужно сделать тут return на начало try
    }

    но почему то не работает, выходит к private static void Main, и программа завершается
    может как то в цикл if загнать весь try ?

    подскажите плиз.
    • Перемещено Siddharth Chavan 1 октября 2010 г. 22:40 MSDN Forums Consolidation (От:Visual C#)
    21 ноября 2009 г. 14:26

Ответы

  • Вам стоит пересмотреть логику приложения. Я уверен, что его можно спроектировать так, чтобы не прыгать из catch в try. Если не нашли выхода, то можете в качестве решения использовать логических флаг и при исключении устанавливать его в catch и выполнять блок try до тех пор пока он не сбросится.
    static void Main(string[] args)
            {
                bool bLog = false;
                do
                {
                    try
                    {
                        string str = Console.ReadLine();
                        if (str == "throw")
                        {
                            throw new Exception();
                        }
                        bLog = false;
                    }
                    catch (Exception)
                    {
                        Console.WriteLine("Exception: Repeat actions");
                        bLog = true;
                    }
                } while (bLog);
            }
     
    Можно еще рассмотреть использование goto, но почему-то нас им пугают, хотя я на счет него придерживаюсь альтернативного мнения.
            static void Main(string[] args)
            {
            metka:
                try
                {            
                    throw new Exception();
                }
                catch (Exception)
                {
                    string str = Console.ReadLine();
    
                    if (str !="quit")
                    {
                        Console.WriteLine("False");
                        goto metka;
    
                    }
                    else
                    {
                        Console.WriteLine("True");
                    }
                }
            }
    • Предложено в качестве ответа I.VorontsovModerator 23 ноября 2009 г. 10:42
    • Помечено в качестве ответа I.VorontsovModerator 27 ноября 2009 г. 7:41
    23 ноября 2009 г. 8:28

Все ответы

  • Вам стоит пересмотреть логику приложения. Я уверен, что его можно спроектировать так, чтобы не прыгать из catch в try. Если не нашли выхода, то можете в качестве решения использовать логических флаг и при исключении устанавливать его в catch и выполнять блок try до тех пор пока он не сбросится.
    static void Main(string[] args)
            {
                bool bLog = false;
                do
                {
                    try
                    {
                        string str = Console.ReadLine();
                        if (str == "throw")
                        {
                            throw new Exception();
                        }
                        bLog = false;
                    }
                    catch (Exception)
                    {
                        Console.WriteLine("Exception: Repeat actions");
                        bLog = true;
                    }
                } while (bLog);
            }
     
    Можно еще рассмотреть использование goto, но почему-то нас им пугают, хотя я на счет него придерживаюсь альтернативного мнения.
            static void Main(string[] args)
            {
            metka:
                try
                {            
                    throw new Exception();
                }
                catch (Exception)
                {
                    string str = Console.ReadLine();
    
                    if (str !="quit")
                    {
                        Console.WriteLine("False");
                        goto metka;
    
                    }
                    else
                    {
                        Console.WriteLine("True");
                    }
                }
            }
    • Предложено в качестве ответа I.VorontsovModerator 23 ноября 2009 г. 10:42
    • Помечено в качестве ответа I.VorontsovModerator 27 ноября 2009 г. 7:41
    23 ноября 2009 г. 8:28
  • Можно еще рассмотреть использование goto, но почему-то нас им пугают, хотя я на счет него придерживаюсь альтернативного мнения.
    Имхо, очень замечательный инструмент, главное не переусердствовать, а для чего всего лишь:
    Стоит пересмотреть логику приложения.
    =)
    23 ноября 2009 г. 10:38
    Модератор
  • я остановил свйо выбор на цикле for с нулевым критерием.
    10 декабря 2009 г. 12:52
  • По-моему, цикл for здесь не совсем к месту. Можно данный вариант в студию)
    6 января 2010 г. 19:17