TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 550 subscribers
Post #524 340
تفاوت IEnumerable و IEnumerator

یادمه در یکی از مصاحبه هایی که داشتم مصاحبه کننده وارد مبحث Collection ها شد و ازم خواست تفاوت IEnumerable و IEnumerator رو توضیح بدم.
منم چون فقط اسمشونو شنیده بودم گفتم هردو اینترفیس های Collection هستن
و وقتی مصاحبه کننده گفت: خب؟! همین...؟؟!
تازه فهمیدم چقدر زیاد راجب این دو و تفاوت هاشون نمیدونم...

تفاوت IEnumerable و IEnumerator

برای اینکه موضوع برام جا بیفته، یک مثال واقعی کمکم کرد.

ببینیم IEnumerable چیه؟
فرض کن وارد یک کتابخانه میشیم.
اولین چیزی که می بینیم لیست موضوعات کتاب‌هاست: رمان، فلسفه، تاریخی، علمی و…

اما هنوز به هیچ کتابی نزدیک نشدیم، چیزی ورق نزدیم و هیچکدومو انتخاب نکردیم.

درواقع IEnumerable دقیقاً همین کار رو می‌کنه:
فقط میگه این مجموعه قابل پیمایشه و میشه روش iterat کرد.
نه آیتم میاره، نه جلو و عقب می‌ره، نه حرکت می‌کنه.

و IEnumerator چیه؟
حالا نوبت کتابداره! IEnumerator همون کتابداریه که:
حرکت می‌کنه
آیتم فعلی رو میاره
و حتی دوباره می‌تونه به اول لیست برگرده

و سه قابلیت اصلی و کلیدی داره:

حرکت به آیتم بعدی : ()MoveNext
آیتم فعلی : Current
برگشت به ابتدا : ()void Reset

یعنی تنها «عامل حرکت» در تمامی collection ها ، IEnumerator هست.

و حالا یه اتفاق جالب رخ میده وقتی ما روی یک لیست حلقه میزنیم.
وقتی می‌نویسیم:
foreach (var item in list)

کامپایلر اینو تبدیل می‌کنه به:
IEnumerator enumerator=list.GetEnumerator();

while (enumerator.MoveNext())
{
var item = enumerator.Current;
}

یعنی foreach دقیقا این کار رو انجام می‌ده:
از IEnumerable → یک Enumerator جدید می‌گیره و باهاش پیمایش انجام میده.
خلاصه تفاوت های اصلی:

🔸️IEnumerable :
مشخص میکنه یک مجموعه قابل پیمایشه (مثل فهرست کتابخانه)

🔹️IEnumerator:
یک الگوریتم پیمایشه (مثل کتابداری که حرکت می‌کنه و کتاب میاره)
این موضوع شاید وقتیکه متوجه ش شدم ساده به‌نظر رسید،
اما فهمیدن همین مفاهیم پایه‌ و به ظاهر ساده ست که کیفیت کد و صاحب کد رو مشخص میکنه.
🔗Link
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →