通过索引获取列表项


321

我最近开始使用c#从Java迁移过来。我似乎找不到如何通过索引获取列表项。在Java中,获取列表的第一项将是:

list1.get(0);

C#中的等效项是什么?


4
有关是否使用[]运算符或ElementAt()方法的讨论,请参见stackoverflow.com/questions/5326874/…
ngm 2015年

Answers:


362
list1[0];

假设列表的类型已定义索引器。


5
唯一的解释说明了为什么可以访问列表,该列表是一个对象,例如数组
PrashanD

它是否返回列表中对象的副本?obj =列表[0]; list.clear(); //仍然会填充obj吗?
Paul McCarthy

1
@Paul McCarthy:您可以轻松地自己测试一下,但是可以。列表包含对对象的引用。清除列表不会影响其中包含的对象。如果没有其他对这些对象的引用,则它们将在某个时间点被垃圾回收。
米奇·麦特

241

您可以在列表上使用ElementAt扩展方法。

例如:

// Get the first item from the list

using System.Linq;

var myList = new List<string>{ "Yes", "No", "Maybe"};
var firstItem = myList.ElementAt(0);

// Do something with firstItem

24
请注意,ElementAt()需要using System.Linq;
ngm 2015年

16
与标准myList[0]符号相比,这有什么好处吗?
AnalogWeapon

5
“为什么要使用Enumerable.ElementAt()而不是[]运算符?” stackoverflow.com/questions/5326874/...
Lavande

3
.ElementAtOrDefault();
阿米特·贾(Amit jha),

@AnalogWeapon是的-您可以将其用作null安全链的一部分,例如,myCollectionWhichMightBeNull?.ElementAt(0)或再次保护不存在的元素:myCollection.ElementAtOrDefault(0)?.SomeProperty
Chris Peacock


18

这是一个老问题,但是我看到这个线程最近才处于活动状态,所以我继续讲两分钱:

米奇说的差不多。假设索引正确,您可以继续使用方括号表示法,就像访问数组一样。但是,除了使用数字索引之外,如果您的成员有特定的名称,则通常可以通过键入以下内容来进行同时搜索/访问:

var temp = list1["DesiredMember"];

了解的越多,对不对?


0

.NET List数据结构Array位于“可变外壳”中。

因此,您可以使用索引来访问其元素,例如:

var firstElement = myList[0];
var secondElement = myList[1];

C#8.0开始,您可以使用IndexRange类来访问元素。它们提供从序列末尾的访问,或者仅访问序列的特定部分:

var lastElement = myList[^1]; // Using Index
var fiveElements = myList[2..7]; // Using Range, note that 7 is exclusive

您可以将索引和范围组合在一起:

var elementsFromThirdToEnd = myList[2..^0]; // Index and Range together

您也可以使用LINQ ElementAt方法,但是对于99%的情况,这确实不是必需的,而只是性能缓慢的解决方案。


0

您可以使用索引来访问列表元素

List<string> list1 = new List<string>();
list1[0] //for getting the first element of the list
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.