我需要保持一个简短的历史记录值。所以我需要一个最大数量的项目列表。我希望它即使在满的时候也能接受新的添加。在这种情况下,我希望我添加的最古老的物品丢失。 我没有找到适合这个目的的课程,然后做了我自己的课程。我以后肯定会添加方法,但现在我有我需要的。有限项目列表
所以我的第一个问题是:它是一个正确的代码:http://pastebin.com/0BCbyNqJ 这个班对你来说看起来是否够干净?
我的第二个问题是关于这些例外,我扔。
/// <summary>
/// Oldest item added to the list
/// </summary>
public T First
{
get
{
if (_head < 0)
throw new IndexOutOfRangeException("The list is empty");
if (_firstRoundDone)
return _array[(_head + 1) % _max];
else
return _array[0];
}
}
事情之前被添加到我的清单,我想First
,Last
和Count
调用返回null。我认为这会更有意义。但我不知道该怎么做,因为返回类型是int或T,为此我不想添加像where T:Nullable
这样的约束。 由于我没有看到任何解决方案,我想知道Exception是否是最后的最优雅的方式。或者我应该实施如GetFirst(out T first)
甚至TryGetFirst(out T)
?
似乎也许一个队列会更合适? http://msdn.microsoft.com/en-us/library/7977ey2c.aspx – McGarnagle
你总是可以返回'默认(T)',而不是空... – Spontifixus
@dbaseman队列只是一个FIFO收集,这不是” t像LRU缓存一样具有有限的容量 – mtijn