Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Lấy enumerator duyệt LinkedList trong C#

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>.Enumerator là 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.