C#我应该循环直到没有例外吗?

时间:2009-10-24 23:44:24

标签: c# loops

我想通过一个循环,但只有在抛出异常时才返回循环。我怎么用C#写这个?

由于

7 个答案:

答案 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;
            }
        }

希望它会有所帮助:)