使用Linq在C#中基于List<>项检索索引

4

这是一个非常简单的问题,我有一个对象列表,其中包含一个名为“ID”的字段。

如果我知道ID,如何检索列表中对象的索引?

例如:

CUSTOM_OBJECTS test = new CUSTOM_OBJECTS{ID=50};
List<CUSTOM_OBJECTS> List = new List<CUSTOM_OBJECTS>();
List.Add(test);

我想要在列表中获取ID为50的对象的索引,例如,在这个例子中它是0。

9
下面是您的回答,但您应该真正考虑您的编码标准。类的全大写名称和列表对象的大写字母将使您的代码对大多数其他开发人员难以阅读。我现在去洗眼睛了! - Øyvind Bråthen
抱歉给您带来不便 :-) 类名必须使用驼峰命名法吗? - user399356
1
它们不必使用驼峰命名法,只使用大写字母会使代码难以阅读(并且看起来非常像SQL风格 :)) - tchrikch
1
@Orf - 通常类、属性、事件等都是采用驼峰命名法,而字段、局部变量、参数等则采用帕斯卡命名法。当然,您可以自由选择命名方式,但这样做将与其他C#开发人员最“兼容” :) - Øyvind Bråthen
2
@Øyvind - 你搞混了,PascalCase 是标识符中的第一个字母和每个后续单词的第一个字母都大写。camelCase 是小写的第一个字母,后续每个单词的首字母都大写。 - Phill
@Phill - 当然是正确的。我被上一个评论中的驼峰式写法搞混了 :) 感谢纠正。 - Øyvind Bråthen
2个回答

15
var index = List.FindIndex(x=>x.ID==50);

我非常确定FindIndex仅存在于List<T>类上,因此它无法在其他IEnumerables上工作。以防万一有人在某个时候感到困惑。 - Glenn
@Glenn:是的,FindIndex() 是一个普通的 List<T> 方法,不是 LINQ 的方法 ;) - digEmAll
@tchrikch - 我自己也不知道 FindIndex,所以我很感激这个答案。恭喜你获得的第一个银徽章,只要 Orf 接受这个答案 :) - Øyvind Bråthen
@Øyvind Knobloch-Bråthen 谢谢,我知道它还不完全是一个LINQ方法,但如果你在泛型List<T>对象上工作,它非常棒。 - tchrikch

-3
CUSTOM_OBJECT singleObject = list.Single(co => co.ID == 50)

你也可以使用方法SingleOrDefault、First或FirstOrDefault。


他说他想要具有该ID的对象的索引,而不是对象本身。 - Jonas Van der Aa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接