以下代碼會生成兩個CA2000警告(其中包括但不是重點)。如何在所有權轉移後襬脫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() {}
}
請注意,沒有爲item1生成警告。看起來,代碼分析假定ICollection
將承擔該項目的責任,並最終處置它。
有沒有一種方法,以紀念我的Add
方法,從而使警報消失?
我在找尋類似於CA1062的ValidatedNotNullAttribute
。
編輯:說清楚:這不是我真正的代碼。在真實的代碼中,一切都妥善處理。
這只是CA不承認,打到我Add
方法轉移所有權。 我希望它能夠像處理ICollection.Add
一樣對待我的Add方法。
在同一範圍內處置不是一種選擇。
接受我自己的答案,因爲這是我在這種情況下所做的:在已實現IDisposable的類上實現ICollection。我完全同意Damien的觀點:如果CA需要IDisposable和ICollection,那將更有意義。 – Henrik 2010-10-23 07:19:38
有什麼辦法可以通過索引在一次性物品字典上實現類似的東西嗎? – Dave 2018-03-02 10:20:34