TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 548 subscribers
Post #59 99
🚧 خطای IndexOutOfRangeException :
چرا آرایه‌ها از لبه پرت می‌شوند؟
یکی از اولین و رایج‌ترین خطاهای زمان اجرایی که هر برنامه‌نویس #C باهاش روبرو میشه، همین IndexOutOfRangeException هست. اون لحظه‌ای که فکر می‌کنی همه چی درسته، ولی برنامه با این خطا کرش می‌کنه.

اما این خطا دشمن شما نیست، بلکه یه نگهبان مهمه! بیاید ببینیم داستانش چیه و چرا وجودش برای ما خوبه.

1️⃣ بررسی محدوده (Bounds Checking) چیست؟

وقتی شما یک آرایه می‌سازید، در واقع یک محدوده مشخص در حافظه تعریف می‌کنید. Bounds Checking یعنی CLR (محیط اجرای دات‌نت)، قبل از دسترسی به هر خانه‌ی آرایه، مثل یه نگهبان با دقت چک می‌کنه که آیا ایندکسی که دادی، تو محدوده مجاز آرایه هست یا نه.

اگه از محدوده خارج بزنید، اون نگهبان جلوتون رو می‌گیره و خطای IndexOutOfRangeException رو پرتاب می‌کنه.
// آرایه‌ای با ۳ عنصر که ایندکس‌های مجاز آن 0, 1, 2 هستند
int[] arr = new int[3];

arr[0] = 10; // ✅ مجاز
arr[2] = 30; // ✅ مجاز

// تلاش برای دسترسی به ایندکس 3 که وجود نداره!
arr[3] = 40; // 💥 BOOM! IndexOutOfRangeException


2️⃣چرا این خطا یک "ویژگی" خوب است؟ ✅

شاید اولش از این خطا بدتون بیاد، ولی وجودش دو تا دلیل خیلی مهم داره:

امنیت و پایداری (Safety) :

این بررسی جلوی دسترسی و تخریب ناخواسته بخش‌های دیگه حافظه رو می‌گیره. اگه این خطا نبود، ممکن بود برنامه‌تون داده‌های دیگه رو خراب کنه و هیچوقت نفهمید مشکل از کجاست.

دیباگ آسان :

به جای اینکه برنامه‌تون با یه رفتار عجیب و غریب به کارش ادامه بده و بعداً یه جای نامربوط کرش کنه، دقیقاً همون لحظه و همون خطی که اشتباه کردی، بهت خطا میده. این دیباگ کردن رو فوق‌العاده راحت‌تر می‌کنه.

3️⃣آیا این بررسی روی پرفورمنس تأثیر دارد؟ 🚀

شاید فکر کنید این همه چک کردن، برنامه رو کند می‌کنه. درسته که یه هزینه خیلی جزئی داره، ولی کامپایلر JIT (Just-In-Time) خیلی هوشمنده.

مثلاً، قبل از ورود به یه حلقه، اگه بفهمه تمام ایندکس‌ها امن هستن، چک کردن رو برای کل حلقه بهینه می‌کنه. پس در ۹۹٪ مواقع، تأثیر این بررسی روی پرفورمنس ناچیز و قابل چشم‌پوشی است.

نکته حرفه‌ای: البته #C به شما اجازه میده در شرایط خاص و با مسئولیت خودتان، با استفاده از کد unsafe این بررسی امنیتی رو دور بزنید، که یه بحث خیلی پیشرفته‌ست.
🤔 حرف حساب و خاطرات شما
پس دفعه بعدی که این خطا رو دیدید، بهش به چشم یه دشمن نگاه نکنید، بلکه ازش به عنوان یه راهنما که داره اشتباهتون رو دقیق نشون میده، تشکر کنید!

اولین باری که به این خطا برخوردید یادتونه؟ داشتید روی چه کدی کار می‌کردید؟ بیاید از خاطرات مشترک برنامه‌نویسیمون بگیم!

ادامه‌ی بحث، سوالات، غر زدن‌ها و گپ و گفت‌های خودمونی، فقط تو گروه.
[@CSharpGeeksChat]

🔖 هشتگ‌ها :
#CSharp
#ErrorHandling
#DotNet
#Exception
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 →