【问题标题】:Getting a list item by index通过索引获取列表项
【发布时间】:2013-03-05 14:38:37
【问题描述】:

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

list1.get(0);

c#中的等价物是什么?

【问题讨论】:

标签: c# list


【解决方案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() 而不是 [] 运算符?” stackoverflow.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 开始,您可以使用 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% 的情况,这实际上是没有必要的,只是性能缓慢的解决方案。

      【讨论】:

        【解决方案6】:

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

        List<string> list1 = new List<string>();
        list1[0] //for getting the first element of the list
        

        【讨论】:

          猜你喜欢
          • 2011-09-24
          • 1970-01-01
          • 1970-01-01
          • 2014-08-14
          • 1970-01-01
          • 2013-12-03
          • 1970-01-01
          • 1970-01-01
          • 2017-06-25
          相关资源
          最近更新 更多