在使用“using”块时,有哪些特定情况应该(或不应该)使用:
using(SomeType t = new SomeType()){
...
}
其他人已经提到了"IDisposable"。
但是使用"using"语句时的一个注意事项是, 任何在"using"内抛出的异常都不会被捕获, 尽管"SomeType"将会被处理掉。
因此,在下面的代码片段中,
using (SomeType t = new SomeType()){
throw new Exception("thrown within using");
}
throw new Exception("thrown within using");
不应该被忽视。
我还要补充一点,如果某个东西实现了IDispose
接口,并且你想要处理它所持有的非托管资源,比如数据库连接和文件句柄,那么使用using()
语句是很好的选择。
如果它只是一个普通对象,例如一个包含名称和地址的Customer
对象的List<T>
,那么你就不需要这样做。垃圾回收器足够聪明,可以为你管理这些对象。但是垃圾回收器不会将连接返回到连接池或关闭文件句柄。