当前位置:  开发笔记 > 编程语言 > 正文

C#"使用"语法

如何解决《C#"使用"语法》经验,为你挑选了4个好方法。

use会捕获异常还是抛出异常?即

using (StreamReader rdr = File.OpenText("file.txt"))
{
 //do stuff
}

如果streamreader抛出异常是通过使用或抛出来捕获的,那么调用函数可以处理它吗?



1> jop..:

当您看到using语句时,请考虑以下代码:

StreadReader rdr = null;
try
{
    rdr = File.OpenText("file.txt");
    //do stuff
}
finally
{
    if (rdr != null)
        rdr.Dispose();
}

所以真正的答案是它不会对使用块体内抛出的异常做任何事情.它不处理它或重新抛出它.



2> FlySwat..:

使用语句不要吃异常.

所有"使用"的作用都是将对象作为使用块的范围,并在对象离开块时自动调用对象上的Dispose().

但是,如果一个线程被外部源强制中止,则可能永远不会调用Dispose.


根据http://msdn.microsoft.com/en-us/library/system.threading.threadabortexception.aspx,catch和finally语句仍然执行.由于"using"编译为finally块,因此将处理示例中的stread reader.
我相当肯定你的"陷阱"不准确.由于StreamReader类实现了IDisposable,因此using语句将负责处理对象.因为using语句的作用类似于finally块,所以如果您有异常或返回则无关紧要.

3> Chris Marast..:

using允许例外通过.它就像一个try/finally,最终处理使用过的对象.因此,它仅适用于实现的对象IDisposable.



4> stephenbayer..:

它会抛出异常,因此要么包含方法需要处理它,要么将其传递给堆栈.

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! 
}

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有