Giới thiệu
LinkedList<T> cung cấp GetEnumerator() trả về LinkedList<T>.Enumerator (struct) để duyệt từ đầu đến cuối. Cũng có thể dùng foreach.
Ví dụ 1: Duyệt 10 phần tử với Enumerator
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main()
{
LinkedList list = new LinkedList();
list.AddLast("A");
list.AddLast("B");
list.AddLast("C");
list.AddLast("D");
list.AddLast("E");
list.AddLast("F");
list.AddLast("G");
list.AddLast("H");
list.AddLast("I");
list.AddLast("J");
Console.WriteLine("Số nút = " + list.Count);
Console.WriteLine("Các phần tử LinkedList... (Enumerator duyệt LinkedList)");
LinkedList.Enumerator demoEnum = list.GetEnumerator();
while (demoEnum.MoveNext())
{
string res = demoEnum.Current;
Console.WriteLine(res);
}
}
}
Kết quả
Số nút = 10
Các phần tử LinkedList... (Enumerator duyệt LinkedList)
A
B
C
D
E
F
G
H
I
J
Ví dụ 2: Hai LinkedList, gán tham chiếu
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main(string[] args)
{
LinkedList list1 = new LinkedList();
list1.AddLast("One");
list1.AddLast("Two");
list1.AddLast("Three");
list1.AddLast("Four");
list1.AddLast("Five");
Console.WriteLine("Các phần tử LinkedList1...");
foreach (string res in list1)
{
Console.WriteLine(res);
}
LinkedList list2 = new LinkedList();
list2.AddLast("India");
list2.AddLast("US");
list2.AddLast("UK");
list2.AddLast("Canada");
list2.AddLast("Poland");
list2.AddLast("Netherlands");
Console.WriteLine("Các phần tử LinkedList2... (Enumerator duyệt LinkedList2)");
LinkedList.Enumerator demoEnum = list2.GetEnumerator();
while (demoEnum.MoveNext())
{
string res = demoEnum.Current;
Console.WriteLine(res);
}
LinkedList list3 = new LinkedList();
list3 = list2; // gán tham chiếu
Console.WriteLine("LinkedList3 bằng LinkedList2? = " + list3.Equals(list2));
}
}
Kết quả
Các phần tử LinkedList1...
One
Two
Three
Four
Five
Các phần tử LinkedList2... (Enumerator duyệt LinkedList2)
India
US
UK
Canada
Poland
Netherlands
LinkedList3 bằng LinkedList2? = True
Đặc điểm Enumerator
LinkedList<T>.Enumeratorlà struct (value type), tránh allocation heap.- Chỉ hỗ trợ duyệt tiến (forward), không có
Reset. - Nếu list bị sửa đổi khi đang enumerate, sẽ ném
InvalidOperationException.