c# - 我怎样才能传递异常?

标签 c# exception

基本上,我想做的是在同一个 try block 中将一个特定的异常传递给一个更通用的异常。我已经尝试了以下但它不起作用:

    static bool example(int count = 0)
    {
        try
        {
            work();
        }
        catch (TimeoutException e)
        {
            if (count < 3)
            {
                Console.WriteLine("Caught TimeoutException: {0}", e.Message);
                return example(count + 1);
            }
            else
            {
                throw new Exception(e.Message);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("Caught Exception: {0}", e.Message + " rethrown");
            return false;
        }
        return true;
    }

    static void work()
    {
        throw new TimeoutException("test");
    }

我希望 TimeoutException 在转到更通用的 Exception 之前只处理一定次数。这是因为 TimeoutException 根据具体情况提供有关异常的附加信息。我不想在 TimeoutExceptionelse 子句下复制 Exception 的代码。我希望处理所有异常的原因是可能会抛出其他未知异常。该程序的性质要求它不会崩溃,因此我必须考虑任何其他异常并记录它们。我该如何实现?

最佳答案

如果你想这样处理,你需要将它嵌套为 2 次尝试:

static bool example(int count = 0)
{
  try
  {
    try
    {
        work();
    }
    catch (TimeoutException e)
    {
        if (count < 3)
        {
            Console.WriteLine("Caught TimeoutException: {0}", e.Message);
            return example(count + 1);
        }
        else
        {
            // Just throw, don't  make a new exception
            throw; //  new Exception(e.Message);
        }
    }
  }
  catch (Exception e)
  {
        Console.WriteLine("Caught Exception: {0}", e.Message + " rethrown");
        return false;
  }
  return true;
}

“内部 try/catch”只会捕获 TimeoutException,因此任何其他异常将始终转到外部范围。当你重新抛出时,它也会自动被外部作用域捕获,这样就不需要杀死异常信息。 (如果您throw new Exception,您将丢失堆栈跟踪数据和其他非常有值(value)的调试信息。)

关于c# - 我怎样才能传递异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13922165/

相关文章:

C# 如何循环用户输入直到输入的数据类型正确?

c# - 使用 .NET Remoting 进行 session 内通信

java - 在 Spring Boot 中提供通用异常处理程序,将所有异常转换为 HTTP 500

delphi - 是否存在一般 E : Exception? 未捕获的异常

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

javascript - Blazor WebAssembly JSRuntime.InvokeVoidAsync - blazor.webassembly.js :1 Uncaught (in promise) TypeError: Converting circular structure to JSON

c# - 使用 C# 更新或删除 CSV 中的一行

c# - 从 foreach 语句内部返回有任何副作用吗?

python - 如何向 while 循环添加 ValueError 异常?

java - 我在尝试 httpcon.getInputStream() 时遇到 FileNotFoundException。有没有办法方便的检查是否是404网页?