У меня есть фабричный метод, который строит объекты, которые реализуют IDisposable
. В конечном счете это вызывающие, которые управляют временем жизни созданных объектов. Эта конструкция вызывает пучок CA2000 errors. Есть ли что-то принципиально неправильное в моем дизайне, нужно ли ему рефакторинг, или это просто слишком волнует предупреждения о статическом анализе кода?CA2000 при возврате одноразового объекта из метода
Завод метод
public static DisposableType BuildTheDisposableType(string param1, int param2)
{
var theDisposable = new DisposableType();
// Do some work to setup theDisposable
return theDisposable
}
Вызывающий
using(var dt = FactoryClass.BuildTheDisposableType("data", 4))
{
// use dt
}
Этот вопрос должен быть прекрасным здесь, но в будущем он может быть лучше подходит для [programers.stackexchange.com] (http://programmers.stackexchange.com/). – gunr2171
@ gunr2171: Я не согласен. Это очень хороший вопрос для [так]. –
Обратите внимание, что если между созданием переменной и оператором return возникает исключение, одноразовое будет протекать. Я бы предложил включить блок 'finally', который проверяет, является ли' theDisposable' ненулевым и вызывает 'theDisposable.Dispose()' если это так. Чтобы вернуть объект, скопируйте ссылку на другую переменную и исключите исходную ссылку. Слишком плохо, нет инструкции «держать», чтобы отменить эффекты «использования» на выбранных путях программы. – supercat