Нет, вышеуказанные элементы не сохранят свои старые индексы - они будут перемешаны. Это связано с тем, что они хранятся в виде связанного списка (List<T>
), поэтому любой пробел в списке фактически разрушит цепочку, и любые элементы, находящиеся за «пробелом», будут недоступны.
Связанные списки работают, если каждый элемент хранит ссылку на ячейку памяти следующего (думайте, указатели, если вы знакомы с C++). Поэтому, если один элемент удален. Объект должен «восстановить» список, повторно связав элемент после удаленной с элементом раньше. Как указывалось ранее, элементы, находящиеся за удаленным элементом, были бы недоступны, если бы ссылка не была фиксированной (и фиксация ссылки означает, что элементы сдвигаются вниз).
Например, предположим, что у меня был List<T>
из string
с на следующих позициях индекса следующих элементов:
0 - "Bob"
1 - "Joe"
2 - "Bill"
Как это работает в том, что Боб будет содержать ссылку на Джо, и Джо есть ссылка на Билл. Поэтому, когда вы обращаетесь к индексу, вызывается рекурсивный алгоритм, начиная с 0 (Боб) и получая ссылку на следующий элемент. Этот процесс повторяется дважды для индекса из двух (получить ссылку Боба (Joe), а затем получить ссылку на это (Билл), который является вашим индексом два). Это не было бы вообще для индекса 0, потому что 0 является стартовым элементом, поэтому он просто вернет это.
Это последний бит не было на самом деле отношения к вашему вопросу, но, надеюсь, вы узнали что-то новое :)
Если у вас уже есть, вы можете попробовать его и проверить результат .. –
индексов ListBox представляют текущий индекс в списке. Если вы удалите элемент, все индексы после удаления будут изменены. В вашем примере, если вы удалите все элементы, кроме 'dog', будет только один элемент с индексом' 0'. –
Спасибо, есть ли умный способ удержать значения индекса, чтобы я мог использовать это значение для чего-то еще? Единственный способ, которым я могу думать, - это запустить цикл для хранения всех значений индекса, а затем удалить элементы. – Vince