Получить индекс объекта в общем списке

У меня есть список настраиваемых объектов с двумя свойствами в качестве идентификаторов (IDa, IDb) каждый раз, когда я удаляю объект, мне нужно знать его индекс. как я могу получить индекс объекта, не зацикливая весь список?

List<CustomObject> list =new List<CustomObject>();
list.RemoveAll((MiniMapRecord p) => p.IDa == IDa.SystemID & p.IDb == pInputRecordMap.IDb);

Ответы

Ответ 1

Вы хотите FindIndex (Predicate)

int index = list.FindIndex(MiniMapRecord p => p.IDa == IDa.SystemID & p.IDb == pInputRecordMap.IDb);

Ответ 2

Как утверждали другие, нет способа избежать перебора элементов, чтобы найти их, если вы не выполните:

Помните индексы. Когда вы создаете список, сохраните соответствующие индексы в переменной-члене. Возможно, это не подходит для вашей проблемы.

Или:

Сохраните список и выполните двоичный поиск элемента. Это также может не работать, потому что у вас есть два идентификатора.

IndexOf() - простое решение, но оно будет стоить O (N) (линейное).

Ответ 3

Вы можете использовать метод IndexOf(), чтобы получить индекс данного элемента вашего List<>.

Однако обратите внимание, что поскольку связанный список не подразумевает никакого произвольного доступа, действительно нет другого способа найти определенный элемент (и, следовательно, его индекс), отличный от начала с самого начала и проверки одного элемента за раз.

Ответ 4

Используйте метод .IndexOf() списка, чтобы найти индекс, затем используйте .RemoveAt(), чтобы удалить его.