2011-08-26 83 views
2

我明白using子句的作用,但是它应该与未命名的参数一起使用吗?C#使用子句 - 澄清

例如;应:

var navigator = new XPathDocument(new StringReader(request)).CreateNavigator(); 

是:

using (StringReader sr = new StringReader(request)) 
{ 
    var navigator = new XPathDocument(sr).CreateNavigator(); 
    ... 
} 
+0

是的,我会使用第二个代码块。 –

+0

无论它是有名还是无名都会有所作为吗? – BoltClock

+0

@BoltClock - 这是个问题...... – 2DZ4lbtvs

回答

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 
} 

在我看来,你应该总是使用第二种方法。

1

你的第一个代码块是相同的:

StringReader sr = new StringReader(request); 
var navigator = new XPathDocument(sr).CreateNavigator(); 

不同的是,你不为你的StringReader一个明确的 “把手” 和因此失去了以后使用它的能力(例如:处置它)。

因此,您应该使用“使用”子句。它也增强了可读性。

2

无论您是将实施IDisposable的对象分配给变量,您都应该继续使用它,因此您应该使用Using

0

是的,你应该使用这个,如果你可以。如果你不这样做,我认为MS代码分析甚至会提醒你。