C# - 如果发生错误,继续执行foreach()循环

时间:2010-11-17 02:36:36

标签: c# xml error-handling foreach

我目前有一个listview和一个包含XML文档的文件夹。我正在使用foreach()循环遍历所有XML文件并相应地将数据加载到listview中。我的问题是,如果in(如果其中一个XML文件不完全有效,包含错误等)并且仍然将数据添加到listview,我如何继续使用foreach()循环?我不是在问如何解析XML或如何将它加载到listview中,我知道该怎么做,而不是如果发生错误就不继续循环。

7 个答案:

答案 0 :(得分:5)

你想要:

foreach(var xml in xmls)
{
   try
   {
     //import xml to listview
   }
   catch (SomeException e)
   {
     //deal with the exception here
   }
}

答案 1 :(得分:1)

将循环的内部内容包装在try ... catch块中。

e.g。

foreach (var foo in iterableThing) {
    try {
        DoStuff(foo);
    }
    catch (AppropriateException) {
        // Handle the exception (or ignore it)...
    }
    catch (SomeOtherException) {
        // Handle the exception (or ignore it)...
    }
}

答案 2 :(得分:0)

你不会这样做

foreach( loop )
{
   try {
   }
   catch (Exception ex)
   {
      // all errors caught here, but the loop would continue
   }
}

答案 3 :(得分:0)

您可以在try catch块中执行文件处理并处理错误情况。您可以在catch中正常处理错误并继续加载数据。

答案 4 :(得分:0)

我认为你应该这样做:

foreach(var doc in docs)
{
    //Make a function to evaluate the doc
    if(isValid(doc))
    {
        //Logging or something
        continue;
    }
    //Add data to listview
}

答案 5 :(得分:0)

如果处理代码抛出异常,则使用try/catch块。如果您使用if块检查某个方法的结果,请使用continue

答案 6 :(得分:0)

如果您需要更频繁地使用它,或者您只想拥有更优雅的代码,可以使用lambda表达式和委托来为此目的创建新的抽象:

static void SafeForEach<T>(this IEnumerable<T> source, Action<T> op) {
  foreach(var el in source) {
    try { op(el); }
    catch (Exception e) { }
  }
}

然后你可以写:

xmls.SafeForEach(xml => {
     // Xml processing
  });

但是,在预期错误的情况下使用异常不是最佳编程风格。如果您可以编写方法,请说IsValid如果文档有效则返回true,那么您可以写:

foreach(var xml in xmls.Where(x => x.IsValid)) { 
  // Xml processing
}