获取通用列表中对象的索引

时间:2011-03-24 12:42:40

标签: c# list generics

我有一个自定义对象列表,其中有两个属性作为标识符(IDa,IDb) 每次我删除一个对象,我需要知道它的索引。 如何在不循环所有列表的情况下获取对象的索引?

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

4 个答案:

答案 0 :(得分:20)

您想要的方法是 FindIndex(Predicate)

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

答案 1 :(得分:8)

正如其他人所说的那样,除非你这样做,否则没有办法避免在项目中循环找到一个:

记住索引。创建列表时,将相关索引保存到成员变量。这可能不适合您的问题。

或者:

保持列表排序并对项目进行二进制搜索。这也可能无效,因为您有两个标识符。

IndexOf()是一个简单的解决方案,但它将花费O(N)(线性)。

答案 2 :(得分:6)

您可以使用IndexOf()方法获取List<>的给定元素的索引。

但请注意,由于链接列表不包含随机访问,因此除了从头开始并一次检查一个元素之外,实际上没有任何其他方法可以找到特定元素(以及因此的索引)。 / p>

答案 3 :(得分:4)

使用列表的.IndexOf()方法查找索引,然后使用.RemoveAt()将其删除。