В рамках наших стандартов разработки Visual Studio 2010 (прежде всего C # 4.0) у нас включен анализ кода. Поскольку я рассматриваю недавно представленный код для нового проекта, я вижу тонну
CA2000: Microsoft. Надежность: в методе 'XYZ' объект 'ABC' не является
расположены вдоль всех путей исключения. Вызов System.IDisposable.Dispose on
объект 'ABC' до того, как все ссылки на него выйдут из области видимости.
предупреждения. Проблема в том, что ничего, что я делаю, похоже, не устраняет предупреждения - и я часами рылся в Интернете и пробовал все, что мог.
Во-первых, позвольте мне прояснить, что я не говорю о вставке простого блока using для правильной утилизации локальной переменной - это не проблема. В моем случае эти предупреждения появляются, когда объект либо возвращается методом, либо назначается другому объекту в методе.
Вот пример кода, который содержит четыре таких предупреждения:
public void MainMethod()
{
var object1 = CreateFirstObject(); // Warning here
var object2 = CreateSecondObject(); // Warning here
SomeCollectionProperty.Add(object1);
SomeCollectionProperty.Add(object2);
}
private SomeObject CreateFirstObject()
{
var theObject = new SomeObject() // Warning here
{
FirstProperty = "some value",
// ...
};
return theObject;
}
private SomeOtherObject CreateSecondObject()
{
var theObject = new SomeOtherObject() // Warning here
{
FirstProperty = "a different value",
// ...
};
return theObject;
}
Я прокомментировал строки, где появляются предупреждения.
Я попытался реорганизовать оба метода Create, как описано в статье MSDN ( здесь ), но предупреждения по-прежнему появляются.
UPDATE
Я должен отметить, что SomeObject и SomeOtherObject реализуют IDisposable.
Кроме того, хотя инициализаторы объектов могут быть компонентом проблемы, имейте в виду, что инициализаторы изолированы от двух частных методов и не имеют ничего общего с предупреждениями в MainMethod.
Может кто-нибудь показать мне, как правильно реализовать эти методы для устранения предупреждений CA2000?