Zeo*_*os6 3 c# exception-handling block try-catch
我是C#的新手,希望更好地理解异常捕获.这些问题可能是愚蠢的菜鸟问题.它们对我很重要,我提前道歉.
例如,在System.IO Path类GetFullPath中,可以抛出五个异常:ArgumentException,SecurityException,ArgumentNullException,NotSupportedException和PathTooLongException.我知道必须组织catch块,以便首先捕获最具体的异常,最后捕获最常见的异常.
问题1:当MSDN提供有关类抛出的可能异常的信息时,如何知道哪个异常最具体,哪个异常最少?换句话说,如何从MSDN给我的最具体到最不具体的特定顺序来确定?
问题2:我是否需要明确地捕获所有异常,或者仅使用最大的generaL异常捕获所有其他异常?例如,仍然使用Path类,我需要做...
try { ... }
catch(System.ArgumentNullException ane) { ... }
catch(System.NotSupportedException nse) { ... }
catch(System.IO.PathTooLongException ple) { ... }
catch(System.IO.SecurityException se) { ... }
catch(System.ArgumentException ae) { ... }
Run Code Online (Sandbox Code Playgroud)
或者简单......
catch(System.ArgumentException ae) { ... }
Run Code Online (Sandbox Code Playgroud)
赶上所有例外?
问题3:在bool方法中执行以下操作是否是正确的语法结构...
try
{
... ;
return true;
}
catch(System.ArgumentException ae)
{
... ;
return false;
}
Run Code Online (Sandbox Code Playgroud)
问题1:
在每个异常的MSDN文档中,您可以看到它的继承链.这告诉你哪些更具体(链条越低,它们就越具体).
您还可以在Visual Studio对象浏览器中查看此信息.
问题2:
抓住可以做某些事情的例外是一种很好的做法.如果你无法合理地做任何事情,那就让它冒泡吧.
通常,tt最好先捕获更具体的异常.
您还需要查看不同的继承链并确定要捕获的异常.例如,只是做:
catch(System.ArgumentException ae) { ... }
Run Code Online (Sandbox Code Playgroud)
不会抓住System.IO.SecurityException因为System.IO.SecurityException不继承System.ArgumentException.
问题3:
是的,这是有效的语法.
我不会说好的做法.如果这是一种特殊情况,最好让异常冒泡.建议的设计将导致异常被忽略,并且任何针对此方法编程的人都需要检查返回值(他们可能会忘记).
| 归档时间: |
|
| 查看次数: |
9294 次 |
| 最近记录: |