Пропустить элемент цикла

#c# #loops

#c# #циклы

Вопрос:

Привет, у меня есть код:

 for (int z = 0; z <= db - 1; z  )
{

    string title = dataGridView1.Rows[z].Cells[2].Value.ToString();
    string postContent = dataGridView1.Rows[z].Cells[0].Value.ToString();
    string tags = dataGridView1.Rows[z].Cells[3].Value.ToString();
    string categ = textBox2.Text.ToString();
    string img = dataGridView1.Rows[z].Cells[1].Value.ToString();

    postToWordpress(title, postContent, tags, img);

}
  

Здесь img — это ссылка. Программа загружает это изображение по этой ссылке, а после выгружает.

 public void postToWordpress(string title, string postContent, string tags, string img)

string localFilename = @"f:bizttofile.jpg";
using (WebClient client = new WebClient())

try

{
    client.DownloadFile(img, localFilename);
}

catch (Exception)
{
    MessageBox.Show("There was a problem downloading the file");
}
  

Моя проблема заключается в следующем. У меня в этой строке более 1000 ссылок, и некоторые из них повреждены или не найдены. И на этом моя программа останавливается.

Мой вопрос. Я хотел бы простое решение для пропуска, когда ссылка не работает или программа не может загрузить изображение, не публикуйте, просто переходите к следующему.

Комментарии:

1. Используется continue для пропуска текущей итерации цикла

2. Какова связь между первым и вторым блоком кода?

Ответ №1:

вы должны использовать приведенный ниже код

 for (int i = 0; i < length; i  )
{
    try
    {
        string img = dataGridView1.Rows[i].Cells[1].Value.ToString();
        using (WebClient client = new WebClient())
        {
            client.DownloadFile(img, localFilename);
        }
    }
    catch (Exception ex)
    {
        Debug.WriteLine(ex.Message);
    } 
}
  

В этом случае, если вы получили какое-либо исключение, оно не остановится, цикл for примет следующий элемент.

Ответ №2:

Чтобы пропустить текущий цикл, у вас есть возможность использовать continue .

Вы можете использовать это внутри блока catch, где генерируется какое-либо исключение.

Что-то вроде этого

 try
{
   client.DownloadFile(img, localFilename);
}
catch (Exception)
{
   MessageBox.Show("There was a problem downloading the file");
   continue; // terminate current loop...
}
  

Выйдите из текущего цикла и запустите следующий цикл.

Комментарии:

1. В качестве альтернативы вы можете установить try / catch вокруг вызова postToWordpress в цикле, чтобы перехватывать любые ошибки, которые могут возникнуть.