我需要一个C#版本的Java中的continue语句?
我有以下代码:
for (String b : bar) {
<label>
try {
}
catch (EndpointNotFoundException ex) {
continue <label>
}
}
我该如何在C#中模拟这种情况?当我遇到异常时,我需要重复执行代码而不是继续执行。
我需要一个C#版本的Java中的continue语句?
我有以下代码:
for (String b : bar) {
<label>
try {
}
catch (EndpointNotFoundException ex) {
continue <label>
}
}
我该如何在C#中模拟这种情况?当我遇到异常时,我需要重复执行代码而不是继续执行。
foreach (String b in bar) {
bool retry;
do {
retry = false;
try {
// ...
}
catch (EndpointNotFoundException ex) {
retry = true;
}
} while (retry);
}
或者
var strings = bar.GetEnumerator<string>();
var retry = false;
while (retry || strings.Next()) {
var b = strings.Current;
retry = false;
try {
// ...
}
catch (EndpointNotFoundException ex) {
retry = true;
}
}
如果你只需要继续下一个循环迭代,请使用continue
。
C#还有标签(可以用goto
跳转到它们),但请不要使用它们。
continue
只是一种特殊类型的goto
,因此如果goto
确实很邪恶,那么continue
也是一种特殊的邪恶(由于限制通常更安全)。每个东西都有其适当的用处和正确的使用方式,包括(很少用到的)goto
。 - jballgoto
命名一个“唯一”的情况,那就是显式的穿透 - 在C#中禁止穿透无疑阻止了很多错误,但C语言之所以有它,是有原因的。在C#中,我们可以在另一个case块的末尾使用goto case 2;
来执行该块中的代码。不过,我不会完全限制goto
。我从谷歌搜索中得知,在C#中使用goto
重新进入嵌套循环的开头时,没有其他替代方法。 - Jon Hannagoto <label>;
。我认为你试图做的事情根本不明智 - 你有没有理由期望你不会遇到一个特定迭代总是会抛出异常的情况?
无论如何,如果你想做到不使用goto
来实现你想要的功能,请看这个:
foreach (String b in bar) {
while(!DidSomethingWithThisString(b))
;
}
bool DidSomethingWithThisString(string b)
{
try {
}
catch (EndpointNotFoundException ex) {
return false;
}
return true;
}