짧은 역사를 지켜야합니다. 따라서 최대 개수의 항목이있는 목록이 필요합니다. 그리고 나는 그것이 가득 찼을 때조차 새로운 추가를 받아들이 길 원합니다. 이 경우 추가 한 가장 오래된 항목을 잃어 버리게하고 싶습니다. 나는이 목적에 어울리는 수업을 찾지 못했고, 나 자신을했다. 나중에 확실히 메소드를 추가 할 것이지만, 지금은 필요한 것을 가지고 있습니다.제한된 품목 목록
첫 번째 질문은 다음과 같습니다. 올바른 코드입니까? 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
에 전화를하고 싶습니다. 나는 그것이 더 이해 될 것이라고 생각한다. 하지만 반환 형식이 int 또는 T이고, 따라서 나는 where T:Nullable
과 같은 제약 조건을 추가하고 싶지 않기 때문에 어떻게해야할지 모르겠다. 아무런 해결책이 없기 때문에 Exception이 가장 좋은 방법이 아닌지 궁금합니다. 아니면 GetFirst(out T first)
또는 심지어 TryGetFirst(out T)
과 같은 메소드를 구현해야합니까?
대기열이 더 적합 할 것 같습니까? http://msdn.microsoft.com/en-us/library/7977ey2c.aspx – McGarnagle
당신은 항상 null 대신에'default (T)'를 반환 할 수 있습니다 ... – Spontifixus
@dbaseman 큐는 단지 큐 컬렉션 일 뿐이지 만, LRU 캐시와 같은 제한된 용량을 가짐 – mtijn