如何从列表中获取特定范围(3 - 7)的项目?

Nie*_*els 38 c# list

从列表中选择特定范围内的所有项目并将其放入新列表中的最有效方法是什么?

List<DataClass> xmlList = new List<DataClass>();
Run Code Online (Sandbox Code Playgroud)

这是我的List,我想将所有DataClass项放在新List中的范围(3 - 7)之间.

什么是最有效的方式?一个foreach循环,每次计数++,直到他到达范围之间的项目并将这些项目添加到新列表?

Lig*_*ker 77

您正在寻找的方法是GetRange:

List<int> i = new List<int>();
List<int> sublist = i.GetRange(3, 4);

var filesToDelete = files.ToList().GetRange(2, files.Length - 2);
Run Code Online (Sandbox Code Playgroud)

从摘要:

// Summary:
//     Creates a shallow copy of a range of elements in the source System.Collections.Generic.List<T>.
// Parameters:
//   index:
//     The zero-based System.Collections.Generic.List<T> index at which the range
//     starts.
//   count:
//     The number of elements in the range.
Run Code Online (Sandbox Code Playgroud)

  • 第二行不应该是 `...GetRange(3, 5);` 以便它获得索引 3, 4, 5, 6, 7 吗? (2认同)

Cle*_*ens 28

如果由于任何原因您不想使用GetRange方法,您还可以使用LINQ编写以下内容.

List<int> list = ...
var subList = list.Skip(2).Take(5).ToList();
Run Code Online (Sandbox Code Playgroud)

  • 请注意,对于较大的集合, List&lt;T&gt;.GetRange 会更有效:https://icodeit.wordpress.com/2012/08/27/performance-of-skip-and-take-in-linq-to-objects /,http://geekswithblogs.net/BlackRabbitCoder/archive/2012/03/29/c.net-little-wonders-skip-and-take.aspx (2认同)
  • `GetRange()` 可以抛出 `ArgumentException(偏移量和长度超出数组范围,或者计数大于从索引到源集合末尾的元素数量)`,而 `Skip().Take() ` 不会。 (2认同)