我想通过一个循环,但只有在抛出异常时才返回循环。我怎么用C#写这个?
由于
答案 0 :(得分:21)
这对我来说有点糟糕的设计。一般规则是:例外不用于流量控制。有许多的原因;也就是说,通常有更好/更可靠的方法可用于在抛出异常之前检查事物,并且还会降低效率。
尽管如此,仅仅为了争论,你可以做类似以下的事情:
while (true)
{
try
{
// do stuff here
}
catch (MyException)
{
continue;
}
// all is good
break;
}
再次 - 这是不是推荐的方式。如果你能提供更多的上下文/例子/
,我会很乐意提出更好的建议答案 1 :(得分:3)
以下可以设置重试次数的内容如下:
int tryCount = 0;
while (tryCount < 3)
{
try
{
someReturn = SomeFunction(someParams);
}
catch (Exception)
{
tryCount++;
continue;
}
break;
}
答案 2 :(得分:1)
这实际上取决于你正在做什么,以及抛出的异常类型。许多例外不会通过再次使用完全相同的输入/数据来修复,因此循环只会无限地生成异常。
相反,您应检查相关的异常,然后以适当的方式处理这些异常。
答案 3 :(得分:1)
似乎是一个坏主意,但无论如何尝试这样的事情:
bool exceptionthrown = false;
while (!exceptionthrown)
{
try
{
// Do magic here
}
catch (Exception)
{
exceptionthrown = true;
throw;
}
}
答案 4 :(得分:0)
为什么不调用一个实际执行循环的函数,并在它之后有一个可以再次调用该函数的函数。
private void loop() {
for(...) {
}
}
其他一些方法:
try {
loop();
} catch(Exception e) {
loop();
}
答案 5 :(得分:0)
类似的东西:
bool done = false;
while( ! done )
{
try
{
DoSomething();
done = true;
} catch(Exception ex)
{
HandleException(ex);
}
}
正如Noldorin所说,它闻起来像一个糟糕的设计。您正在使用异常来控制程序的流程。最好能够明确检查导致您重复操作的条件。
答案 6 :(得分:0)
所以我在用这个简单的东西:D
bool exceptionthrow = false;
while (!exceptionthrow)
{
try
{
value = Convert.ToInt32(Console.ReadLine()); //example
exceptionthrow = true;
}
catch (Exception)
{
exceptionthrow = false;
continue;
}
}
希望它会有所帮助:)