我们是一个将代码从C ++转换为C#的项目的开始。一位同事提出了一个包含List<T>
成员的列表类。他不是从List<T>
派生的,因为他需要进行一些验证,然后才能将某项添加到列表中。
有一阵子,我认为从CollectionBase
派生自定义列表可能会有所帮助,但是我读到CollectionBase
已过时,因为我们有通用类。我在这里找到的一篇文章说,有类似问题的用户应从List >派生并在派生类中执行验证,但未说明如何执行。
例如,假设我想要一个仅包含偶数整数的列表。在将整数添加到列表之前,我将如何执行检查以确保它是整数?
最佳答案
您必须实现IList<T>
。从List<T>
派生还不够,因为Add
之类的方法不可覆盖-您可以放弃继承并隐藏基类实现,但这很脏。而且不安全。
因此,只需实现IList<T>
并使用composition:
public class EvenIntsList : IList<int>
{
private readonly IList<int> _list;
public EvenIntsList()
{
_list = new List<int>();
}
public void Add(int item)
{
if(item % 2 == 0)
_list.Add(item);
else
throw new ArgumentException("This list only allows even integers.", "item");
}
}
您还必须为其他
IList<T>
方法提供传递实现,例如:public IEnumerable<int> GetEnumerable()
{
return _list.GetEnumerable();
}
关于c# - 如何验证从List <T>派生的类中的添加项?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21310408/