Если вам необходимо расширить существующий тип коллекции вы должны использовать 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>
и Collection<T>
можно найти здесь: What is the difference between List (of T) and Collection(of T)?
выше класс будет использоваться как это:
var list = new BetList();
list.Add(bet); // this will cause InsertItem to be called
Вам не нужна явная проверка пустой последовательности; ['Sum' вернет 0 в этом случае] (http://msdn.microsoft.com/en-gb/library/bb535184.aspx). – shambulator
@shambulator Это правильно, но я сильный поклонник абсолютно безотказного кода, вне зависимости от того, что – Alex
Я уточню: это * documented *, чтобы вернуть 0 в этом случае. Я не знаю, от чего отказывается ваш чек. :) – shambulator