List<T>
не является частичным классом, поэтому вы не можете расширить его, используя свои собственные частичные классы.
Кроме того, LINQ to Objects не предоставляет Add()
для List<T>
, это часть интерфейса IList<T>
, реализованного List<T>
, и Add()
не является виртуальным или абстрактным методом в List<T>
, поэтому Вы не можете переопределить это.
Обратите внимание на System.Collections.ObjectModel.Collection<T>
- этот компонент предоставляет реализацию списка, аналогичную List<T>
, с дополнительной возможностью переопределять защищенные методы, которые дают вам возможность выполнять задачи проверки.
Вам не нужно реализовывать список с нуля, вы просто наследуете его и переопределяете методы, такие как InsertItem()
и RemoveItem()
, для реализации пользовательских правил:
using System.Collections.ObjectModel;
public class EmailCollection : Collection<Email>
{
public int MaximumAttachments { get; set; }
protected override void InsertItem(int index, Email item)
{
if (Count == MaximumAttachments)
{
... throw error
}
// do actual insert
base.InsertItem(index, item)
}
}
Add()
звонит InsertItem()
под капот.