Giới thiệu
Phương thức GetRange(int index, int count) của List<T> trả về một List mới chứa count phần tử bắt đầu từ index (shallow copy).
Ví dụ cơ bản
Listarr1 = new List { 10, 20, 30, 40, 50 }; List myList = arr1.GetRange(1, 3); // Index 1, lấy 3 phần tử: 20, 30, 40
Ví dụ hoàn chỉnh
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main()
{
List arr1 = new List { 10, 20, 30, 40, 50 };
Console.WriteLine("Initial List ...");
foreach (int i in arr1) Console.WriteLine(i);
Console.WriteLine("Getting elements between a range...");
List myList = arr1.GetRange(1, 3);
foreach (int res in myList) Console.WriteLine(res);
}
}
Kết quả
Initial List ... 10 20 30 40 50 Getting elements between a range... 20 30 40
Tham số và ngoại lệ
index: Chỉ số bắt đầu (0-based). Phải >= 0 và < Count.count: Số phần tử. Phải >= 0 và index + count <= Count.- Ném
ArgumentOutOfRangeExceptionnếu tham số không hợp lệ.
So sánh với LINQ Skip/Take
| Phương pháp | Trả về | Hiệu suất | Ghi chú |
|---|---|---|---|
GetRange(index, count) | List<T> | Nhanh (copy block) | Chỉ List |
Skip(index).Take(count).ToList() | List<T> | Chậm hơn (iterator) | Áp dụng cho mọi IEnumerable |
list[index..(index+count)] (C# 8+) | Span<T> / T[] | Rất nhanh | Chỉ mảng, không phải List |
Lưu ý
- Shallow copy: với kiểu tham chiếu, cả hai list chia sẻ cùng đối tượng.
- Để deep copy, cần clone từng phần tử.
- Dùng
list.AsSpan()[index..(index+count)](NET Core 2.1+) cho hiệu suất cao không cấp phát.