通过索引获取列表项
Posted
技术标签:
【中文标题】通过索引获取列表项【英文标题】:Getting a list item by index 【发布时间】:2013-03-05 14:38:37 【问题描述】:我最近开始使用从 Java 迁移过来的 c#。我似乎无法找到如何按索引获取列表项。在java中获取列表的第一项将是:
list1.get(0);
c#中的等价物是什么?
【问题讨论】:
请参阅***.com/questions/5326874/…,了解有关是否使用 [] 运算符或 ElementAt() 方法的一些讨论。 @user1909486:您尚未接受任何问题的答案 【参考方案1】:list1[0];
假设列表的类型定义了一个索引器。
【讨论】:
解释为什么可以访问列表的唯一答案,它是一个对象,如数组 它是否返回列表中对象的副本?对象=列表[0]; list.clear(); // obj 还会被填充吗? @Paul McCarthy:您可以自己轻松测试,但是可以。列表包含对对象的引用。清除列表不会影响其中保存的对象。如果没有其他对这些对象的引用,它们将在某个时间点被垃圾回收。【参考方案2】:可以在列表中使用 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
【讨论】:
请注意 ElementAt() 需要using System.Linq;
。
与标准的myList[0]
表示法相比,这有什么优势吗?
“我为什么要使用 Enumerable.ElementAt() 而不是 [] 运算符?” ***.com/questions/5326874/…
.ElementAtOrDefault();
@AnalogWeapon 是的 - 您可以将其用作空安全链的一部分,例如myCollectionWhichMightBeNull?.ElementAt(0)
或保护不存在的元素:myCollection.ElementAtOrDefault(0)?.SomeProperty
【参考方案3】:
Visual Basic、C# 和 C++ 都具有无需使用名称即可访问 Item 属性的语法。相反,包含 List 的变量被当作一个数组来使用。
List[index]
例如: https://msdn.microsoft.com/en-us/library/0ebtbkkc(v=vs.110).aspx
【讨论】:
【参考方案4】:老问题,但我看到这个帖子最近很活跃,所以我会继续投入我的两分钱:
和米奇说的差不多。假设索引正确,您可以继续使用方括号表示法,就好像您正在访问数组一样。但是,除了使用数字索引之外,如果您的成员有特定的名称,您通常可以通过键入以下内容来进行同时搜索/访问:
var temp = list1["DesiredMember"];
你知道的越多,对吧?
【讨论】:
【参考方案5】:.NET List
数据结构是“可变外壳”中的 Array
。
因此您可以使用索引来访问它的元素,例如:
var firstElement = myList[0];
var secondElement = myList[1];
从 C# 8.0 开始,您可以使用 Index
和 Range
类来访问元素。它们提供从序列末尾的访问或仅访问序列的特定部分:
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% 的情况,这实际上是没有必要的,只是性能缓慢的解决方案。
【讨论】:
【参考方案6】:您可以使用索引来访问列表元素
List<string> list1 = new List<string>();
list1[0] //for getting the first element of the list
【讨论】:
以上是关于通过索引获取列表项的主要内容,如果未能解决你的问题,请参考以下文章
获取 SectionList 项 React-Native 的索引