Следующий код генерирует два предупреждения CA2000 (среди прочего, но это не так).
public sealed class Item: IDisposable
{
public void Dispose() {}
}
public sealed class ItemContainer
{
public void Add(Item item)
{
}
}
public sealed class Test: IDisposable
{
private ICollection<Item> itemCollection;
private ItemContainer itemContainer;
private void Add(Item item)
{
itemCollection.Add(item);
}
public void Initialize()
{
var item1 = new Item(); // no warning
itemCollection.Add(item1);
var item2 = new Item(); // CA2000: call Dispose on object item2
Add(item2);
var item3 = new Item(); // CA2000: call Dispose on object item3
itemContainer.Add(item3);
}
public void Dispose() {}
}
Обратите внимание, что для элемента 1 не создается предупреждение. Кажется, Code Analysis предполагает, что ICollection
возьмет на себя ответственность за элемент и, в конечном счете, избавит его.
Есть ли способ пометить мои методы Add
, чтобы предупреждение исчезло?
Я ищу что-то похожее на ValidatedNotNullAttribute
для CA1062.
Изменить: чтобы было ясно: это не мой настоящий код. В реальном коде все правильно настроено.
Просто CA не признает, что вызов метода Add
переводит право собственности.
Я бы хотел, чтобы он обрабатывал мои методы добавления таким же образом, как это относится к ICollection.Add
.
Утилизация в той же области не является вариантом.