Я знаю, что это пример кода, и поэтому будет ли этот обход работать в вашем реальном коде, я не могу сказать.
В этом конкретном случае, если вы перемещаете код создания объекта в его собственный метод, который возвращает новый Item, тогда предупреждение исчезнет, например, change:
public void Initialize()
{
var item1 = new Item(); // no warning
itemCollection.Add(item1);
var item2 = CreateItem(); // CA2000 no longer appears
Add(item2);
var item3 = new Item(); // CA2000: call Dispose on object item3
itemContainer.Add(item3);
}
private Item CreateItem()
{
return new Item();
}
Очевидно, что метод CreateItem мог бы передавать произвольные параметры для передачи конструктору Item.
Edit
Увидев ответ Хенрика и ответ по Connect, все, что я могу сказать, это bletch .Нет никакой гарантии, что реализация ICollection также реализует IDisposable, и хотя его опубликованный пример действительно реализует IDisposable, очевидно, это не требуется, чтобы затормозить анализ кода (я был бы несколько в порядке, если бы вам пришлось реализовать оба).Класс, реализующий ICollection, но не реализующий IDisposable, вряд ли будет иметь дело с правильным удалением содержащихся объектов.