2015-10-23 26 views
0

在我極其簡化的代碼示例中,我的Foo()方法調用GetXmlDataSource(),它返回XmlDataSource。 CA2000說我應該在丟失範圍之前使用一個XmlDatasource。我是否需要對這兩個XmlDataSource對象調用.Dispose()? 「CA2000在丟失範圍之前處理對象」告訴我。將其設置爲()它

  • 我應該換一個using語句每個XmlDataSource
  • 我應該在下面一箇中使用try/catch/finally,上面一箇中應該使用using
  • 我是否實際上有兩個XmlDataSource對象,一個在上方法中,另一個在下方法中?

我對這個人的語言行爲有些模糊,我想成爲一個好孩子。

void Foo() 
{ 
    XmlDataSource xds = GetXmlDataSource(); 
} 

XmlDataSource GetXmlDataSource() 
{ 
    XmlDataSource xmlDataSource = new XmlDataSource(); 
    return xmlDataSource; 
} 
+1

你最後一個問題:不,他們是引用類型,所以它只有一個。 –

+0

完成後,您應該將對象置於'Foo'方法中。如果代碼分析抱怨'GetXmlDataSource',嘗試將它命名爲'CreateXmlDataSource',看看它是否有所作爲。 –

回答

1

我應該換一個using語句每個的XmlDataSource?

如果它超出了該方法的範圍,那麼您應該。順便說一下,您也可以使用其他方法的變量using

我應該在下面使用try/catch/finally嗎?

是和否。 XmlDataSource不應該處置,因爲您打算在另一種方法中使用它。如果你有一個會阻止變量傳遞的異常,你應該處理它。

我是否應該在上面使用?

是的,你應該。這段代碼將完成這項工作。

using (XmlDataSource xds = GetXmlDataSource()) 
{ } 

我是否有效有兩個XmlDataSource對象,一個在上方法,一個在較低的方法是什麼?

不,你有一個。這就是爲什麼你不應該放棄較低的一個。從一種方法到另一種方法有一個參考。

+0

感謝您的編輯。你說過,「你也可以在其他方法的變量上使用'using'。」你什麼意思? – Kristopher

+0

像這樣:'使用(XmlDataSource xds = GetXmlDataSource())'。 –

0

1)只包裝使用中的最終用法。 2)不,一個使用就夠了(注意使用的底層實現是一試/最後)。 3)你只有一個對象實例。

相關問題