C#-এ Array.GetEnumerator() মেথডটি অ্যারের জন্য একটি IEnumerator অবজেক্ট ফেরত দেয়, যা অ্যারের উপাদানগুলো কালক্রমিকভাবে (sequentially).iterate করার সুযোগ দেয়। এটি IEnumerable ইন্টারফেসের অংশ।
সিনট্যাক্স (Syntax)
public virtual System.Collections.IEnumerator GetEnumerator();
উদাহরণ: IEnumerator ব্যবহার করে ইটারেশন
using System;
using System.Collections;
public class Demo
{
public static void Main()
{
int j = 0;
Console.WriteLine("Array elements...");
string[] arr = { "car", "bike", "truck", "bus" };
for (int i = 0; i < arr.Length; i++)
{
Console.Write("{0} ", arr[i]);
}
Console.WriteLine();
// IEnumerator পাওয়া
IEnumerator newEnum = arr.GetEnumerator();
Console.WriteLine("IEnumerator for the Array...");
// MoveNext() এবং Current ব্যবহার করে ইটারেশন
while ((newEnum.MoveNext()) && (newEnum.Current != null))
{
Console.WriteLine("[{0}] {1}", j++, newEnum.Current);
}
}
}
আউটপুট
Array elements... car bike truck bus IEnumerator for the Array... [0] car [1] bike [2] truck [3] bus
IEnumerator ইন্টারফেসের সদস্যরা
| সদস্য | বর্ণনা |
|---|---|
MoveNext() | পরবর্তী উপাদানে যাওয়া। সফল হলে true, শেষ হলে false |
Current | বর্তমান উপাদান (object টাইপে) |
Reset() | এনুমেরেটরকে শুরুতে ফেরত আনা |
foreach লুপ vs GetEnumerator()
foreach লুপ আসলে GetEnumerator()-কে আंतरিকভাবে কল করে:
foreach (সহজ এবং সুপারিশকৃত)
string[] arr = { "car", "bike", "truck", "bus" };
foreach (string item in arr)
{
Console.WriteLine(item);
}
ম্যানুয়াল IEnumerator (নিচের স্তরের নিয়ন্ত্রণ)
IEnumerator enumerator = arr.GetEnumerator();
try
{
while (enumerator.MoveNext())
{
string item = (string)enumerator.Current; // キャスト প্রয়োজন
Console.WriteLine(item);
}
}
finally
{
// IDisposable ইমপ্লিমেন্ট করা থাকলে Dispose() কল করুন
(enumerator as IDisposable)?.Dispose();
}
জেনেরিক IEnumerator<T> (টাইপ-সেফ)
অ্যারে IEnumerable<T> ইমপ্লিমেন্ট করে, তাই জেনেরিক এনুমেরেটরও পাওয়া যায়:
using System.Collections.Generic;
string[] arr = { "car", "bike", "truck", "bus" };
IEnumerator enumGeneric = ((IEnumerable)arr).GetEnumerator();
while (enumGeneric.MoveNext())
{
string item = enumGeneric.Current; // কোনো キャスト প্রয়োজন নেই
Console.WriteLine(item);
}
প্রয়োগিক ব্যবহার: কাস্টম ইটারেশন লজিক
public static void ProcessWithDelay(T[] array, Action action, int delayMs) { IEnumerator enumerator = ((IEnumerable )array).GetEnumerator(); while (enumerator.MoveNext()) { action(enumerator.Current); Thread.Sleep(delayMs); // প্রতিটি উপাদানের মাঝে ডিলে } } // ব্যবহার string[] messages = { "Step 1", "Step 2", "Step 3" }; ProcessWithDelay(messages, Console.WriteLine, 1000);
সারসংক্ষেপ: সাধারণ প্রোগ্রামিং-এ foreach ব্যবহার করুন। কাস্টম ইটারেশন লজিক (ফিল্টারিং, ডিলে, প্যারালেল প্রসেসিং) আপনার জন্য GetEnumerator() সরাসরি কল করুন।