【问题标题】:How do I find the index of an object from a list in VB.NET?如何从 VB.NET 的列表中找到对象的索引?
【发布时间】:2011-12-06 17:07:54
【问题描述】:

假设我有一个列表,我有一个对象。如何在列表中找到该对象的索引?

【问题讨论】:

  • ListBox 或 ListView 或 List?
  • 假设该列表是一个 Generics.List(of ...) 那么这个问题很遗憾是模棱两可的,或者至少它是由 MS 这样处理的。多年来,我一直在使用 IndexOf 和 Contains 而没有考虑它,因为我认为它们做了它们的名字所暗示的事情。但他们不搜索对象,而是搜索满足 Equals 函数的对象。这意味着如果您覆盖了 Equals,那么即使对象不存在,IndexOf 也可能会返回一个值,因为列表中的一个对象为 obj.Equals(target) 返回 True。除非对象是不可变的,否则这永远不是我想要的
  • 相关(not 重复):用于检查 存在 和简单 List(Of String) 的更简单情况),请参阅:Check if a list of strings contains a value

标签: vb.net list indexing find


【解决方案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)) 

但如果您只想通过DefaultEqualityComparer 在列表中查找对象,IndexOf 方法会更简单直接:

Dim indexOfMyApple = list.IndexOf(myApple)

如果你不知道它是什么类型,你也可以使用IndexOf,.NET 将使用Equals 来确定两个对象是否相等(应该被覆盖以不仅比较引用)。

【讨论】:

  • 如果我不知道对象中有什么怎么办。我只有参考,但不知道对象的内容。?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-21
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 2020-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多