1

这是我多次遇到的一种模式,我已经四处搜索,但没有就最佳方法达成共识。

public class ItemListWrapper
{
    public List<Item> Contents;
}

public class Item
{
   void DoStuffAndRemove() { }
}

当调用 DoStuffAndRemove() 时,我希望该项目执行一些功能,然后从 ItemListWrapper 中删除。我能想到的两种方法是让 ItemListWrapper 实现 IList (可行,但不得不编写所有样板代码有点烦人)并将委托传递给每个项目以调用它从列表中删除自身(似乎很复杂) .

任何帮助表示赞赏。谢谢。

4

1 回答 1

2

我想你一定有这个ItemListWrapper是因为其他原因。让我们看一下 2 种方法:

1. 每个项目都有对其列表的引用

public class ItemListWrapper
{
    public List<Item> Contents;

    public void Add(Item item){ item.List = this; this.Contents.Add(item); }
}

public class Item
{
   ItemListWrapper List;
   void DoStuffAndRemove() { this.List.Contents.Remove(this); }
}

2.让列表控制一切

public class ItemListWrapper
{
    public List<Item> Contents;

    public void DoStuffAndRemove(Item item)
    { 
        if(this.Contents.Contains(item))
        {
            item.DoStuff();
            this.Contents.Remove(item);
        }
    }
}

public class Item
{
   void DoStuff() { ... }
}

恕我直言,第二个更好,因为我知道该列表必须对其项目负责。

于 2013-03-22T17:17:24.537 回答