我正在尝试创建一个类,该类包含一些已定义TimeSpan
后过期(从集合中删除)的项目集合;我意识到,如果我不主动删除项目,有些可能会过期,仍然在集合中。
到目前为止,我无法决定如何实现此类。我不确定是否应该实施ICollection
,IList
,子类List
或包裹List
?
public struct EDLItem<T>
{
public T Data { get; set; }
public DateTime Created { get; set; }
public EDLItem(T data) : this()
{
Data = data;
Created = DateTime.Now;
}
public Boolean IsExpired(TimeSpan lifetime)
{
TimeSpan lifeSpan = DateTime.Now.Subtract(Created);
return TimeSpan.Compare(lifeSpan, lifetime) == 1;
}
}
public class ExpiringDataList1<T> : ICollection<EDLItem<T>>{}
public class ExpiringDataList2<T> : IList<EDLItem<T>>{}
public class ExpiringDataList3<T> : List<EDLItem<T>>{}
public class ExpiringDataList<T>
{
public TimeSpan DataLifetime { get; set; }
private List<EDLItem<T>> DataList { get; set; }
public ExpiringDataList(TimeSpan dataLifetime)
{
DataLifetime = dataLifetime;
DataList = new List<EDLItem<T>>();
}
public void CheckExperiations()
{
DataList.RemoveAll(item => item.IsExpired(DataLifetime));
}
public void Add(T item)
{
DataList.Add(new EDLItem<T>(item));
CheckExperiations();
}
}
我的计划是检查/删除项目添加到集合时或者迭代集合时已经过期的项目(在收集IENumerable
之前)。
我应该为此实施做出什么选择?
答案 0 :(得分:3)
一些建议:
List<T>
,即使这样,也可能不会。听起来你实际上 正在构建这样的抽象,大多数问及扩展List的人都没有。在这种情况下,问自己两个问题:(1)我是否需要列表的基础机制,(2)是否有人会多态地使用这个东西?见下一点。IEnumerable<T>
。是否有人将其传递给采用IList<T>
的方法?然后执行。但是,这个决定应该由客户要求驱动,而不是由您可能实施的内容驱动。