您可以使用bool
可變標誌catch塊設置和執行繼續抓後聲明,如果標誌指示catch塊的執行。
foreach (string l in lUserName)
{
bool isError = false; //flag would remain flase if no exception occurs
try
{
newMessages = FetchUnseenMessages();
}
catch
{
isError = true;
}
if(isError) continue; //flag would be true if exception occurs
//Other code
}
如果繼續語句退出具有相關聯的最後 塊的一個或多個try塊,則控制最初轉移到最內層的try語句的最後塊 。當和如果控制到達最後一個塊的末尾 點,則控制轉移到下一個包圍try語句的最後一個塊 。重複此過程直到 所有干預嘗試語句的最後塊都執行 ,msdn。
編輯通過所提供的資料的繼續應該是不正常的,你不應該有任何問題的行爲。您可能還有其他問題,如closure variable in a loop,您可以閱讀更多關於變量關閉here。
我做了一個測試來驗證給定的情況,它似乎是正常的。
for (int i = 0; i < 3; i++)
{
try
{
Console.WriteLine("Outer loop start");
foreach (int l in new int[] {1,2,3})
{
Console.WriteLine("Inner loop start");
try
{
Console.WriteLine(l);
throw new Exception("e");
}
catch
{
Console.WriteLine("In inner catch about to continue");
continue;
}
Console.WriteLine("Inner loop ends after catch");
}
Console.WriteLine("Outer loop end");
}
catch
{
Console.WriteLine("In outer catch");
}
}
繼續使用在捕獲的輸出
Outer loop start
Inner loop start
1
In inner catch about to continue
Inner loop start
2
In inner catch about to continue
Inner loop start
3
In inner catch about to continue
Outer loop end
Outer loop start
Inner loop start
1
In inner catch about to continue
Inner loop start
2
In inner catch about to continue
Inner loop start
3
In inner catch about to continue
Outer loop end
Outer loop start
Inner loop start
1
In inner catch about to continue
Inner loop start
2
In inner catch about to continue
Inner loop start
3
In inner catch about to continue
Outer loop end
循環變量外殼
List<Func<int>> actions = new List<Func<int>>();
int variable = 0;
while (variable < 3)
{
actions.Add(() => variable * variable);
++ variable;
}
foreach (var act in actions)
{
Console.WriteLine(act.Invoke());
}
環外殼變量的輸出
9
9
9
迴路可變外殼的解決方案,製作循環變量的副本並將其傳遞到行動。
while (variable < 3)
{
int copy = variable;
actions.Add(() => copy * copy);
++ variable;
}
輸出
0
1
4
吞嚥這樣所有異常是一個非常糟糕的做法。相反,只能吞下您期望拋出的異常類型。 catch(SomeExceptionTypeType){}' –
l沒有被傳入你的方法。那麼是什麼讓你認爲錯誤的循環正在運行? – Aron
「我不認爲繼續聲明會轉到foreach聲明中的下一個項目」你怎麼知道的?你的代碼甚至不使用'l'。 – dasblinkenlight