基本上,我想要做的是在同一个try块中将特定的Exception传递给更一般的Exception.我尝试过以下内容并不起作用:
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");
}
Run Code Online (Sandbox Code Playgroud)
我希望TimeoutException
在进入更通用之前只处理一定次数Exception
.这是因为根据TimeoutException
具体情况,有关于例外的附加信息.我不想复制条款Exception
下的代码.我希望处理所有异常的原因是可能存在其他未知异常.程序的性质要求它不会崩溃,所以我必须考虑任何其他异常并记录它们.我该如何实现呢?else
TimeoutException
如果要以这种方式处理,则需要将此嵌套为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;
}
Run Code Online (Sandbox Code Playgroud)
"内部try/catch"只会捕获TimeoutException
,因此任何其他异常将始终转到外部作用域.当你重新抛出时,它也会自动被外部范围捕获,这消除了杀死异常信息的需要.(如果您throw new Exception
,您丢失了堆栈跟踪数据以及其他非常有价值的调试信息.)
归档时间: |
|
查看次数: |
133 次 |
最近记录: |