ase*_*sel 7 c# exception-handling visual-studio-2008 visual-studio c#-3.0
我有以下C#代码.每当发现异常时(例如在第1行),我就永远无法到达其他行(2,3,4等).
try
{
line1
line2
...
}
catch (Exception ex)
{
...
}
Run Code Online (Sandbox Code Playgroud)
在C#中,是否可以说如果第1行产生异常,只需继续其他行(2,3,4等)?
Fre*_*els 16
不应忽视例外情况.:)
它们存在并被抛出是有原因的:出现了异常情况,某种情况未得到满足,我无法继续工作......
如果在每行代码周围放置一个try/catch块,可以忽略异常,但我不认为你真的想这样做......
Dar*_*mas 10
你可以像这样创建一个SkipOnError方法:
private SkipOnError(Action action)
{
try
{
action();
}
catch
{
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样调用它:
try
{
SkipOnError(() => /*line1*/);
line2;
line3;
} catch {}
Run Code Online (Sandbox Code Playgroud)
编辑:这应该可以更容易地跳过给定的异常:
private SkipOnError(Action action, Type exceptionToSkip)
{
try
{
action();
}
catch (Exception e)
{
if (e.GetType() != exceptionToSkip) throw;
}
}
Run Code Online (Sandbox Code Playgroud)
注意:我实际上并没有建议你这样做 - 至少不是经常这样做,因为我发现自己很讨厌.但它确实展示了我们现在可以用C#做的一些功能性事情,但是!
我真正要做的是:重构line1一个方法(Extract Method).该新方法应该处理任何可预见的异常(如果它们可以被处理),从而使调用者处于已知状态.因为有时你真的想做line1,除非,如果发生错误,也许没关系......
只是试着赶上line1
try
{
try
{
line1
}
catch (Exception ex)
{
...
}
line2
...
}
catch (Exception ex)
{
...
}
Run Code Online (Sandbox Code Playgroud)
弗雷德里克是对的,虽然这样做时你真的需要小心.它应该根据具体情况使用.只有当您知道该过程应该继续时,才应该使用它.否则你应该相应地处理异常.
| 归档时间: |
|
| 查看次数: |
6126 次 |
| 最近记录: |