public void LimitOccurrences(object Value, int NumberToKeep) { if(Value == null) throw new ArgumentNullException("Value"); int Pos = 0; while((Pos = IndexOf(Value, Pos)) >= 0) { if(NumberToKeep <= 0) FList.RemoveAt(Pos); else { Pos++; NumberToKeep--; } if(FComparer.Compare(FList[Pos],Value) > 0 ) break; } }