2017-05-31 76 views
0

我試圖XmlNodeReader對象返回到另一個函數,但得到CA2000警告回到一次性對象和獲取CA2000警告

XmlNodeReader obj =new XmlNodeReader(section); 
return ser.method(obj); 

如果我使用下面的代碼,將它正常工作?警告被抑制,但不確定它是否會影響邏輯。

XmlNodeReader tempObj =new XmlNodeReader(section); 
XmlNodeReader retObj=null; 
retObj = tempObj; 
tempObj.Dispose(); 
return ser.method(retObj); 
+0

嗯,我們不知道是什麼'ser.method'做,但不得傳遞處理方法似乎對我來說是個壞主意。 –

+0

CA2000有時會給你誤報,但是*通常是*表示某些看起來很奇怪的東西,所以它並不全是壞的。您需要確定構造對象的代碼的區域是否也擁有它,或者您是否將所有權交給了接收該對象的所有者。一旦你決定你可以研究如何擺脫警告。 –

+0

請注意,在某些情況下,如果您創建的是「工廠方法」,則可以通過簡單地命名該方法來擺脫警告,請嘗試「Get」與「Create」作爲方法名稱的前綴,請參閱如果有任何幫助。 –

回答

2

嗯,我們不知道做什麼ser.method,但經過一個釋放的對象爲method似乎是一個壞主意給我。基本上,你的「修復」是不好的。

有三種可能性在這裏(也可能是其他人,但這些是主要的):

  • ser.method其參數本身的處置。 (這可能是一個壞主意,但它可能會做到。)在這種情況下,您的原始代碼沒問題。
  • ser.method不出售其參數,但它返回的東西,依賴於仍然沒有被設置
  • ser.method不出售其參數的讀者,並且返回的東西,不需要讀者保持開放

我希望最後的這些情況下,在這種情況下,你應該更改您的代碼:

using (XmlNodeReader reader = new XmlNodeReader(section)) 
{ 
    return ser.method(reader); 
} 
+0

嗨,喬恩。 ser.method是System.XML的Deserialize(XmlReader xmlReader)方法。 – user3386619

+0

@ user3386619:那麼爲什麼沒有用原來的問題說,所以我們不必猜?理想情況下,在提問時提供[mcve]。 –

+0

抱歉在發佈時不遵守規則。從現在開始我會記住這一點。感謝您的回答。 :-) – user3386619