2012-10-22 83 views
1
foreach (String host in hostArray) 
{ 
    string s1 = hostArray[t]; 
    string s2 = branchArray[t]; 
    string con_msg; 
    t=t+1; 
    TcpClient socketForServer; 
    try 
    { 
     socketForServer = new TcpClient(s1, 10); 
     con_msg="Connected"; 
    } 
    catch 
    { 
     ListViewItem item = new ListViewItem(); 
     item.BackColor = Color.LightGreen; 
     item.Text = (s2); 
     item.SubItems.Add(s1); 
     item.SubItems.Add("Not found"); 
     listView1.Items.Add(item); 
     con_msg = "Not connected"; 
     // I want to exit this round in here and and start next round how to do it 
    } 

    NetworkStream networkStream = socketForServer.GetStream(); 
    System.IO.StreamReader streamReader = new System.IO.StreamReader(networkStream); 
    System.IO.StreamWriter streamWriter =new System.IO.StreamWriter(networkStream); 
    //code 
} 

我想退出当前轮次并开始下一轮。怎么做。我不想退出foreach循环,我只想退出本轮并开始下一轮如何停止给定状态下的foreach循环

+4

声明:'继续' – opewix

回答

2
foreach (var item in Items) 
{   
    try 
    { 
    //Exception 
    } 
    catch (Exception) 
    { 
    continue;//Will move to next item of "Items" of FOREACH LOOP 
    } 

    int a = 1 + 1;//If exception gets this line will not execute 
} 
2

continue语句将控制传递给出现的封闭迭代语句的下一个迭代。

这里是如何继续声明看起来像在你的代码:

foreach (String host in hostArray) 
{ 
    string s1 = hostArray[t]; 
    string s2 = branchArray[t]; 
    string con_msg; 
    t=t+1; 
    TcpClient socketForServer; 
    try 
    { 
     socketForServer = new TcpClient(s1, 10); 
     con_msg="Connected"; 
    } 
    catch 
    { 
     ListViewItem item = new ListViewItem(); 
     item.BackColor = Color.LightGreen; 
     item.Text = (s2); 
     item.SubItems.Add(s1); 
     item.SubItems.Add("Not found"); 
     listView1.Items.Add(item); 
     con_msg = "Not connected"; 

     continue; 
    } 

    NetworkStream networkStream = socketForServer.GetStream(); 
    System.IO.StreamReader streamReader = new System.IO.StreamReader(networkStream); 
    System.IO.StreamWriter streamWriter =new System.IO.StreamWriter(networkStream); 
    //code 
} 

转到声明程序控制直接传输到标签的语句。

这里是如何转到声明看起来像在你的代码:

foreach (String host in hostArray) 
{ 
    string s1 = hostArray[t]; 
    string s2 = branchArray[t]; 
    string con_msg; 
    t=t+1; 
    TcpClient socketForServer; 
    try 
    { 
     socketForServer = new TcpClient(s1, 10); 
     con_msg="Connected"; 
    } 
    catch 
    { 
     ListViewItem item = new ListViewItem(); 
     item.BackColor = Color.LightGreen; 
     item.Text = (s2); 
     item.SubItems.Add(s1); 
     item.SubItems.Add("Not found"); 
     listView1.Items.Add(item); 
     con_msg = "Not connected"; 

     goto ErrorOccured; 
    } 

    NetworkStream networkStream = socketForServer.GetStream(); 
    System.IO.StreamReader streamReader = new System.IO.StreamReader(networkStream); 
    System.IO.StreamWriter streamWriter =new System.IO.StreamWriter(networkStream); 
    //code 

    ErrorOccured: 
    Console.WriteLine("Do something else..."); 
} 
+0

您必须在'goto'示例中使用另一个标签,因为'//代码'完成时会执行ErrorOccured。 – Default

+1

我不确定使用“goto”是最佳选择。也许使用错误标志('bool')会是更好的选择,然后在最后选择一个“if(flag)”来选择正确的代码路径。 – Enigmativity

+0

@Default,是的,这就是goto声明的要点..我只提供了2种可能的解决方案。在他的情况下,“继续”声明更加优雅。 – HABJAN

2

使用continue从本轮退出刚刚完成了抓... 通过使用continue语句之前catch,继续和foreach之间的声明应该跳过。作为例子...它就像HABJAN给出的一样..

foreach (String host in hostArray){ 

     string s1 = hostArray[t]; 
     string s2 = branchArray[t]; 
     string con_msg; 
     t=t+1; 
     TcpClient socketForServer; 

     try{ 
      socketForServer = new TcpClient(s1, 10); 
      con_msg="Connected"; 
     } 
     catch{ 
      ListViewItem item = new ListViewItem(); 
      item.BackColor = Color.LightGreen; 
      item.Text = (s2); 
      item.SubItems.Add(s1); 
      item.SubItems.Add("Not found"); 
      listView1.Items.Add(item); 
      con_msg = "Not connected"; 

      continue; 
     } 

     NetworkStream networkStream = socketForServer.GetStream(); 
     System.IO.StreamReader streamReader = new System.IO.StreamReader(networkStream); 
     System.IO.StreamWriter streamWriter =new System.IO.StreamWriter(networkStream); 
     // code 
    }