เมธอด Queue.GetEnumerator() ใน C# ใช้คืนค่า Enumerator (IEnumerator) ที่ใช้สำหรับวนลูปเข้าถึงสมาชิกใน Queue ตามลำดับ FIFO (First-In-First-Out)
รูปแบบไวยากรณ์ (Syntax)
public virtual System.Collections.IEnumerator GetEnumerator();
ตัวอย่างที่ 1: เปรียบเทียบสองคิว
using System;
using System.Collections;
public class Demo
{
public static void Main()
{
Queue queue = new Queue();
queue.Enqueue(100);
queue.Enqueue(200);
queue.Enqueue(300);
queue.Enqueue(400);
Console.WriteLine("Queue1...");
IEnumerator demoEnum = queue.GetEnumerator();
while (demoEnum.MoveNext())
{
Console.WriteLine(demoEnum.Current);
}
Queue queue2 = new Queue();
queue2.Enqueue(100);
queue2.Enqueue(150);
queue2.Enqueue(300);
queue2.Enqueue(400);
Console.WriteLine("\nQueue2...");
demoEnum = queue2.GetEnumerator();
while (demoEnum.MoveNext())
{
Console.WriteLine(demoEnum.Current);
}
// Equals เปรียบเทียบ reference ไม่ใช่เนื้อหา
Console.WriteLine(queue.Equals(queue2)); // False
}
}
ผลลัพธ์
Queue1... 100 200 300 400 Queue2... 100 150 300 400 False
ตัวอย่างที่ 2: คิวขนาดใหญ่
using System;
using System.Collections;
public class Demo
{
public static void Main()
{
Queue queue = new Queue();
for (int i = 1; i <= 10; i++)
{
queue.Enqueue(i * 100);
}
Console.WriteLine("Queue...");
IEnumerator demoEnum = queue.GetEnumerator();
while (demoEnum.MoveNext())
{
Console.WriteLine(demoEnum.Current);
}
}
}
ผลลัพธ์
Queue... 100 200 300 400 500 600 700 800 900 1000
สรุปและข้อแนะนำ
- ใน C# สมัยใหม่ แนะนำใช้
Queue<T>(generic) แทนQueue(non-generic) เพื่อ type safety - สามารถใช้
foreachได้โดยตรงกับ Queue (ซึ่งเรียก GetEnumerator() ให้อัตโนมัติ) Equals()ของ Queue เปรียบเทียบ reference identity ไม่ใช่เนื้อหา- Enumerator เป็น read-only ไม่สามารถแก้ไข Queue ระหว่างการ enumerate ได้
รูปแบบแนะนำ (Modern C#)
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main()
{
Queue queue = new Queue();
queue.Enqueue(100);
queue.Enqueue(200);
queue.Enqueue(300);
// ใช้ foreach โดยตรง (สะดวกกว่า)
foreach (int item in queue)
{
Console.WriteLine(item);
}
}
}