ROB*_*SON 1 c# validation list
我们正处于将代码从C++转换为C#的项目的最开始.一位同事提出了一个包含List<T>
成员的列表类.他并非衍生出来,List<T>
因为在允许将项目添加到列表之前,他需要进行一些验证.
有一段时间,我认为派生自定义列表CollectionBase
可能会有所帮助,但我认为CollectionBase
现在已经过时,因为我们有泛型类.我在这里发现的一篇文章说,具有类似问题的用户应该从List <T
> 派生并在派生类中执行验证,但它没有说明如何做到这一点.
例如,假设我想要一个只包含偶数整数的列表.在将其添加到列表之前,我将如何实现一个确保整数为止的检查?
你必须实施IList<T>
.派生List<T>
是不够的,因为诸如Add
不可覆盖的方法 - 你可以放弃继承并隐藏基类实现,但那是......肮脏的.并且不安全.
所以只需实现IList<T>
和使用组合:
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");
}
}
Run Code Online (Sandbox Code Playgroud)
您还必须为其他IList<T>
方法提供传递实现,例如:
public IEnumerable<int> GetEnumerable()
{
return _list.GetEnumerable();
}
Run Code Online (Sandbox Code Playgroud)