2011-10-13 84 views
4

說我有一個列表,我有一個對象。我如何在列表中找到該對象的索引?如何從VB.NET中的列表中找到對象的索引?

+0

ListBox或ListView或List <>? –

+1

假設列表是一個Generics.List(...),那麼這個問題不幸地是不明確的,或者至少它是由MS處理的。多年來,我一直在使用IndexOf和Contains而沒有考慮它,因爲我認爲他們做了他們的名字暗示。但是他們不會搜索該對象,而是尋找滿足Equals函數的對象。這意味着如果您重寫了Equals,那麼即使對象不存在,IndexOf也可能返回一個值,因爲列表中的對象返回True for obj.Equals(target)。除非對象是不可變的,否則這絕不是我想要的 –

+0

相關(***不*** ***重複):對於檢查**存在**和簡單的'List(Of String)')的簡單情況,請參閱:* [檢查一個字符串列表是否包含一個值](http://stackoverflow.com/questions/26732563)* –

回答

19

您可以使用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方法甚至simplier和更簡單,如果你只是想找到由DefaultEqualityComparer列表中的一個對象:

Dim indexOfMyApple = list.IndexOf(myApple) 

您可以使用IndexOf此外,如果你不知道它是什麼類型,.NET將使用Equals來確定兩個對象是否相等(應該被重寫爲不僅僅是比較引用)。

+0

如果我不知道對象中有什麼,該怎麼辦。我只有參考但不瞭解這些對象的內容。 – rokonoid

+0

@rokonid:編輯我的答案 –