2011-08-26 88 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代碼分析甚至會提醒你。