using(...)语句是try {} finally {}的语法糖。使用语句和try-catch() - 最终重复?
但是,如果我再有一个using语句象下面这样:
using (FileStream fs = File.Open(path))
{
}
现在我想赶上那打开此文件可能会导致异常(这是相当高的风险代码,它可能因失败环境),但如果我写try-catch内部会不会重复?当代码被编译为IL时,我假设代码被打乱时重复会被删除?但是,我想要捕捉异常打开文件可能会导致(所以我应该包装在使用语句的范围之外的try-catch),以及我在使用块内部做的任何异常,所以我应该添加块内的try-catch。
这看起来好像我为CLR可能在里面做了很多重复。 CLR是否添加catch子句?
我的同事争辩说使用语句很混乱(但这是因为一行代码稍微长一点,因为我编写代码很困难,因为我需要快速更改代码,并且无法访问代码的其他部分基础)。所述同事不使用使用语句,但在使用语句和try-finally/try-catch-finally之间是否存在任何功能差异?我曾看到过这种情况,WCF服务有一个关于最终使用和返回值(最终有关)的不为人知的案例。解决方案是使用一个校验块。在C#中有这样的东西吗?
在另一个说明中,是否实现了非托管资源的IDisposale所有者的所有类型?与朋友的讨论指出了否定的答案。 (我也在这个论坛的使用部分阅读了一些主题,那里有一些非常好的知识)。
尽管最终使用支持吗?你在哪里发现了使用匿名范围块的使用方法?我想更多地了解这一点。所以当我在一个使用块(例如FileSream.Open())中打开一个文件时,这个异常就会冒泡。如果using语句实现try/finally,那么我必须在try/catch中包装它才能获得该catch。 – dotnetdev 2009-10-08 22:44:03