我们是一个将代码从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/

10-12 03:25
查看更多