簡體   English   中英

C#-如果發生錯誤,請繼續執行foreach()循環

[英]C# - Proceed with foreach() loop if an error occurs

我目前有一個listview和一個充滿XML文檔的文件夾。 我正在使用foreach()循環遍歷所有XML文件並將數據相應地加載到listview中。 我的問題是,如果in中出現錯誤(例如:如果其中一個XML文件不是完全有效,包含錯誤等)並且仍將數據添加到listview,如何繼續進行foreach()循環? 我不是問如何解析XML或如何將XML加載到列表視圖中,我知道該怎么做,只是不問發生錯誤時如何進行循環。

你想要:

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

將循環的內部內容包裝在try ... catch塊中。

例如

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

你不會嗎

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

您可以在try catch塊中進行文件處理並處理錯誤情況。 您可以在catch中優雅地處理錯誤,然后繼續加載數據。

我認為您應該這樣做:

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

如果您的處理代碼引發異常,請使用try/catch塊。 如果要使用if塊檢查某種方法的結果,請使用continue

如果您需要更頻繁地使用它,或者只想擁有更優雅的代碼,則可以使用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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM