2017-05-31 8 views
0

Je suis en train de revenir XmlNodeReader à une autre fonction, mais obtenir avertissement CA2000retour objet jetable et obtenir avertissement CA2000

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

Si j'utilise le code suivant, il fonctionnera correctement? L'avertissement est supprimé mais pas sûr si cela affectera la logique ou non.

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

Eh bien, nous avons aucune idée de ce 'ser.method' fait, mais le passage d'un objet disposé en «méthode» semble être une mauvaise idée pour moi . –

+0

CA2000 vous donne parfois des résultats faussement positifs, mais est * habituellement * une indication de quelque chose d'étrange qui n'est pas si mauvais. Vous devez décider si la zone du code qui construit l'objet le possède également, ou si vous transmettez la propriété à celui qui reçoit l'objet. Une fois que vous avez décidé que vous pouvez regarder comment se débarrasser de l'avertissement. –

+0

Notez que dans certains cas, si vous créez une "méthode usine", vous pouvez vous débarrasser de l'avertissement en nommant simplement la méthode mieux, essayez "Get" vs "Create" comme préfixe pour le nom de la méthode, voir si l'un d'entre eux aide. –

Répondre

2

Eh bien, nous ne savons pas ce ser.method fait, mais le passage d'un objet disposé dans method semble être une mauvaise idée pour moi. Fondamentalement, votre "correctif" est mauvais.

Il y a trois possibilités ici (et probablement d'autres, mais ce sont les principaux):

  • ser.method dispose de son paramètre lui-même. (C'est probablement une mauvaise idée, mais cela pourrait le faire.) Dans ce cas, votre code d'origine est correct.
  • ser.method ne dispose pas de son paramètre, mais il retourne quelque chose qui repose sur le lecteur toujours pas disposé à
  • ser.method ne dispose pas de son paramètre et renvoie quelque chose qui n'a pas besoin du lecteur à rester ouvert

J'espère que le dernier d'entre eux est le cas, dans ce cas, vous devriez changer votre code:

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

Bonjour Jon. ser.method est la méthode Deserialize (XmlReader xmlReader) de System.XML. – user3386619

+0

@ user3386619: Alors pourquoi ne pas l'avoir dit dans la question originale, donc nous n'aurions pas à deviner? Idéalement, fournissez un [mcve] lorsque vous posez une question. –

+0

Excuses de ne pas suivre la règle lors de la publication. Je vais garder cela à l'esprit à partir de maintenant. Merci pour votre réponse. :-) – user3386619