我理解using子句的作用,但是它应该与未命名的参数一起使用吗?
例如;应:
var navigator = new XPathDocument(new StringReader(request)).CreateNavigator();
是:
using (StringReader sr = new StringReader(request))
{
var navigator = new XPathDocument(sr).CreateNavigator();
...
}
答案 0 :(得分:2)
将是否将实现IDisposable
的对象分配给变量没有任何区别,您仍然应该处理它,因此您应该使用Using
。
答案 1 :(得分:1)
您的第一个代码就相当于:
StringReader sr = new StringReader(request);
var navigator = new XPathDocument(sr).CreateNavigator();
不同之处在于你没有为你的StringReader创建一个明确的“句柄”,因此失去了以后使用它的能力(例如:处理它)。
因此,您应该使用“using”子句。它还增强了可读性。
答案 2 :(得分:1)
了解其工作原理的最佳方式:测试!
class Program
{
public static void Main()
{
using (TestDisposable d = new TestDisposable())
{
} // Will trace "disposed"
UseDisposable use = UseDisposable.Create(new TestDisposable());
// Will trace "disposed"
}
}
public class UseDisposable
{
public TestDisposable Disposable;
public static UseDisposable Create(TestDisposable disposable)
{
return new UseDisposable()
{
Disposable = disposable
};
}
}
public class TestDisposable : IDisposable
{
private bool _disposed = false;
#region IDisposable Membres
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
public void Dispose(bool disposing)
{
if(!_disposed && disposing)
{
Trace.WriteLine("Disposed");
_disposed = true;
}
}
#endregion
}
在我看来,你应该总是使用第二种方法。
答案 3 :(得分:0)
是的,如果可以,你应该使用它。我认为MS代码分析甚至会警告你,如果你不这样做。