Возврат одноразового предмета и получение предупреждения CA2000

Я пытаюсь вернуть XMLNodeReader другой функции, но получаю предупреждение 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);

1 ответ

Ну, мы понятия не имеем, что ser.method делает, но передача удаленного объекта в method кажется плохой идеей для меня. По сути, ваше "исправление" - это плохо.

Здесь есть три возможности (и, возможно, другие, но это основные):

  • ser.method располагает своим параметром сам. (Вероятно, это плохая идея, но она может подойти.) В этом случае ваш оригинальный код в порядке.
  • ser.method не избавляется от своего параметра, но возвращает то, что полагается на читателя
  • ser.method не располагает своим параметром и возвращает то, что не нужно, чтобы читатель оставался открытым

Я надеюсь, что последним из них является случай, и в этом случае вы должны изменить свой код на:

using (XmlNodeReader reader = new XmlNodeReader(section))
{
    return ser.method(reader);
}
Другие вопросы по тегам