C#尝试/捕获后,回到Foreach循环?

时间:2011-12-05 08:07:15

标签: c# try-catch console-application

我构建了一些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循环并继续工作......我怎样才能做到这一点? 从Catch,我只需要消息..

编辑: 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 个答案:

答案 0 :(得分:2)

这将在异常后继续循环。

由于您在DoSomething()方法中捕获了异常,因此不会破坏循环。 <{1}}中只有未处理的异常会打破循环。

答案 1 :(得分:2)

如果它正在终止,我怀疑异常只是不在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);
    }