C # После Try / Catch, вернуться к циклу Foreach? - PullRequest
2 голосов
/ 05 декабря 2011

Я построил какой-то CodeExample:

      static void Main(string[] args)
      {
              foreach (String hello in helloList)
              {
                     DoSomething(hello);
              }
      }

      public static void DoSomething(String hello)
      {
               try
               {
                    //Some Code
               }
               catch (Exception exception)
               {
                    Console.WriteLine(exception.Message);
                    Console.ReadKey();
               }
       }

Я перебираю List, и иногда случается, что программа входит в Catch. Теперь программа завершается после Console.ReadKey(); - но я хочу вернуться к циклу foreach и продолжить работу. Как я могу этого достичь? Из Поймка мне нужно только сообщение ..

EDIT: OriginalCode:

    static void Main(string[] args)
    {
     //Some unimportant code
              StringCollection bilderUnterLink = HoleBildLinksVonWebseite(htmlInhaltUnterLink);
              foreach (String bild in bilderUnterLink)
              {
                     BildAbspeichern(bild);
              }                                 
     }

public static void BildAbspeichern(String bildLink)
        {
            string speicherOrt = webseite + @"/" + bildLink;
            string gueltigerBildLink;
            if (bildLink.Contains("http://"))
            {
                gueltigerBildLink = bildLink;
            }
            else
            {
                gueltigerBildLink = "http://" + webseite + @"/" + bildLink;
            }

            if (!File.Exists(webseite + @"/" + Path.GetFileName(gueltigerBildLink)))
            {
                try
                {
                    WebClient client = new WebClient();
                    client.DownloadFile(gueltigerBildLink, speicherOrt);
                    Console.WriteLine(String.Format("Bild gepeichert:    " + "{0}", gueltigerBildLink));
                }
                catch (Exception exception)
                {
                    Console.WriteLine(exception.Message);
                    Console.ReadKey();
                }
            }
        }

Я думаю, этого достаточно важный код .. И он заканчивается, я знаю, что это не должно ..

Ответы [ 2 ]

2 голосов
/ 05 декабря 2011

Если это заканчивается, я подозреваю, что исключение просто не внутри try;так что ... измените это:

public static void BildAbspeichern(String bildLink)
{
    try {
         ... all your code
    } catch (Exception exception)
    {
        Console.Error.WriteLine(exception.Message);
        Console.ReadKey();
    }
}

Другие примечания:

  • примечание Я изменил на Console.Error для вывода ошибок;хорошая практика (это пишет stderr, а не stdout)
  • ожидание нажатия клавиши без уведомления ожидающего пользователя может привести к путанице;лично я бы удалил ReadKey() полностью
  • , вы должны использовать using на WebClient, поскольку это IDisposable, то есть

    using(var client = new WebClient()) {
        client.DownloadFile(gueltigerBildLink, speicherOrt);
    }
    
2 голосов
/ 05 декабря 2011

Это продолжит цикл после исключения.

Поскольку вы перехватываете исключение внутри метода DoSomething(), это не будет прерывать цикл.Только необработанное исключение внутри DoSomething() прервет цикл.

...