gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:59:17 26 4
gpt4 key购买 nike

基本上,我想做的是在同一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com