KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
The following code generates two CA2000 warnings (among others, but that's not the point). 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() {} } Note that there is no warning generated for item1. It seems, Code Analysis assumes the ICollection will take responsibility of the item and eventually dispose it. Is there a way to mark my Add methods, so that the warning goes away? I'm looking for something similar to ValidatedNotNullAttribute for CA1062. Edit: to make it clear: this is not my real code. In the real code, everything is properly disposed. It's just that CA does not recognize that the call to my Add methods transfers ownership. I would like it to treat my Add methods in the same way it treats ICollection.Add . Disposing in the same scope is not an option.
Tags (comma-separated)
Save Edits
Cancel