Проблема в том, что внутри
for (int i = 0; i < items.Count; i++)
{
...
items.Add(item);
...
}
вы постоянно добавляете все больше и больше предметов. Таким образом, на каждой итерации цикла items.Count
будет на +1 элемент больше => условие выхода i >= items.Count
никогда не будет выполнено.
& RightArrow; Никогда не изменяет счетчик списка при переборе одного и того же списка!
Причина, по которой в конце концов вы используете continue
(переходите к следующей итерации) ... это не имеет смысла, поскольку в этот момент в любом случае начнется следующая итерация.
Вы, вероятно, можете break
(прервать цикл) или даже return
, так как в любом случае сразу после цикла вы снова вызываете items.Add(item)
...
Вы, вероятно, скорее хотите использовать List<T>.Insert(int index, T item)
public void Add(T item)
{
int newIndex = 0;
// You don't need an additional if-else
// since this loop is anyway never executed
// if (items.Count == 0)
for (int i = 0; i < items.Count; i++)
{
num = item.CompareTo(items[i]);
if (num >= 0)
{
// we want to add the new item AFTER
// the item we compared it to
newIndex = i+1;
return;
}
}
// Inserts the item at index newIndex
// if newIndex == items.Count this equals Add
items.Insert(newIndex, item);
}
Обратите внимание, что это на самом деле уже существует!
Называется SortedSet<T>