Как найти индекс объекта из списка в VB.NET?

Скажем, у меня есть список, и у меня есть объект. Как мне найти индекс этого объекта в списке?


person rokonoid    schedule 13.10.2011    source источник
comment
ListBox или ListView или List‹›?   -  person Sam Casil    schedule 13.10.2011
comment
Если предположить, что список представляет собой Generics.List(of...), то этот вопрос, к сожалению, неоднозначен, или, по крайней мере, он так обрабатывается MS. В течение нескольких лет я использовал IndexOf и Contains, не задумываясь об этом, потому что думал, что они делают то, что подразумевают их названия. Но они ищут не объект, а тот, который удовлетворяет функции Equals. Это означает, что если вы переопределили Equals, то IndexOf может вернуть значение, даже если объект отсутствует, потому что объект в списке возвращает True для obj.Equals(target). Это никогда не то, что я хочу, если объекты не являются неизменными   -  person Kevin Whitefoot    schedule 08.01.2014
comment
Связанный (не дубликат): Для более простого случая проверки существования и простого List(Of String) см.: Проверить, содержит ли список строк значение   -  person Peter Mortensen    schedule 19.10.2016


Ответы (1)


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

 Dim list As New List(Of Object)
 Const myApple = "Apple111"
 For i = 0 To 1000
     List.Add("Apple" & i)
 Next
 Dim indexOfMyApple = list.FindIndex(Function(apple) myApple.Equals(apple)) 

Но метод IndexOf еще проще и понятнее, если вы хотите найти объект в списке с помощью DefaultEqualityComparer:

Dim indexOfMyApple = list.IndexOf(myApple)

Вы также можете использовать IndexOf, если вы не знаете, какой это тип, .NET будет использовать Equals, чтобы определить, равны ли два объекта (следует переопределить, чтобы сравнивать не только ссылки).

person Tim Schmelter    schedule 13.10.2011
comment
что, если я не знаю, что находится в объекте. У меня есть только ссылка, но я понятия не имею о содержимом объектов.? - person rokonoid; 13.10.2011