use会捕获异常还是抛出异常?即
using (StreamReader rdr = File.OpenText("file.txt")) { //do stuff }
如果streamreader抛出异常是通过使用或抛出来捕获的,那么调用函数可以处理它吗?
当您看到using语句时,请考虑以下代码:
StreadReader rdr = null; try { rdr = File.OpenText("file.txt"); //do stuff } finally { if (rdr != null) rdr.Dispose(); }
所以真正的答案是它不会对使用块体内抛出的异常做任何事情.它不处理它或重新抛出它.
使用语句不要吃异常.
所有"使用"的作用都是将对象作为使用块的范围,并在对象离开块时自动调用对象上的Dispose().
但是,如果一个线程被外部源强制中止,则可能永远不会调用Dispose.
using
允许例外通过.它就像一个try/finally,最终处理使用过的对象.因此,它仅适用于实现的对象IDisposable
.
它会抛出异常,因此要么包含方法需要处理它,要么将其传递给堆栈.
try { using ( StreamReader rdr = File.OpenText("file.txt")) { //do stuff } } catch (FileNotFoundException Ex) { // The file didn't exist } catch (AccessViolationException Ex) { // You don't have the permission to open this } catch (Exception Ex) { // Something happened! }