我需要保持简短的价值观历史。所以我需要一个包含最大项目数的列表。而且我希望它即使已满也能接受新添加的内容。在这种情况下,我希望我添加的最旧的项目丢失。我没有找到任何适合这个目的的课程,然后我自己做了。稍后我肯定会添加方法,但现在我有我需要的。
所以我对你的第一个问题是:它是一个正确的代码吗: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)
吗?