1

有没有办法做到这一点:

class BetList : List<Bet>
{
    public uint Sum { get; private set; }
    void Add(Bet bet) : base.Add(bet)  // <-- I mean this
    {
        Sum += bet.Amount;
    } 
}

我想使用基础 List 类来执行 List 操作。我只想实现 Summming。

4

4 回答 4

6

你应该使用组合,而不是推导

class BetList
{
     List<Bet> _internalList=new List<Bet>();
     //forward all your related operations to _internalList;
}
于 2013-03-28T12:31:18.353 回答
2

如果您需要扩展现有的集合类型,您应该使用Collection<T>专为此目的设计的集合类型。例如:

public class BetList : Collection<Bet>
{
    public uint Sum { get; private set; }

    protected override void ClearItems()
    {
        Sum = 0;
        base.ClearItems();
    }

    protected override void InsertItem(int index, Bet item)
    {
        Sum += item.Amount;
        base.InsertItem(index, item);
    }

    protected override void RemoveItem(int index)
    {
        Sum -= item.Amount;
        base.RemoveItem(index);
    }

    protected override void SetItem(int index, Bet item)
    {
        Sum -= this[i].Amount;
        Sum += item.Amount;
        base.SetItem(index, item);
    }
}

可以在这里找到对List<T>和之间差异的一个很好的解释: List (of T) 和 Collection(of T) 之间的区别是什么?Collection<T>

上面的类将像这样使用:

var list = new BetList();
list.Add( bet );  // this will cause InsertItem to be called
于 2013-03-28T12:43:03.353 回答
0

如果您想保留类派生而不是组合,请尝试以下操作:

class BetList : List<Bet>
{
    public uint Sum { get; private set; }
    new void Add(Bet bet) 
    {
        base.Add(bet);
        Sum += bet.Amount;
    } 
}
于 2013-03-28T12:36:39.210 回答
0

当您需要它而不是存储它时,如何即时计算总和?

class BetList : List<Bet>
{
    public uint Sum 
    { 
        get { return this.Count > 0 ? this.Sum(bet => bet.Amount) : 0; }
    }
}
于 2013-03-28T13:12:21.697 回答