2011-10-13 48 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:编辑我的答案 –