0Pricing
C# Academy · درس

أخطاء التكرار الشائعة

تعديل المجموعة أثناء التكرار

أخطاء التكرار الشائعة درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.

مشكلات التكرار الشائعة

الحلقات بسيطة، لكن بعض الأخطاء تربك المبتدئين مرارًا.

سنستعرض في هذا الدرس أكثر أخطاء التكرار شيوعًا وكيفية تجنبها.

تعديل المجموعة أثناء التكرار

أكبر الأخطاء هو تغيير مجموعة أثناء التكرار عبرها باستخدام foreach.

تؤدي إضافة العناصر أو إزالتها أثناء التكرار إلى طرح InvalidOperationException أثناء التشغيل.

foreach (var n in list)
{
    if (n < 0) list.Remove(n); // ERROR at runtime
}

الحل الآمن

للإزالة أثناء التكرار، كرّر عبر نسخة، أو اجمع العناصر أولًا ثم أزلها بعد ذلك.

يمنحك التكرار عبر list.ToList() لقطة منفصلة للتنقل عبرها.

var list = new List<int> { 1, -2, 3, -4 };
foreach (var n in list.ToList())
{
    if (n < 0) list.Remove(n);
}
Console.WriteLine(string.Join(",", list));

خطأ بمقدار واحد في حلقات for

في حلقة for اليدوية، يؤدي استخدام <= بدلًا من < إلى القراءة بعد نهاية المجموعة.

تتراوح الفهارس الصالحة من 0 إلى Length - 1، ولذلك يجب أن يكون الشرط i < Length.

for (int i = 0; i <= arr.Length; i++) // BUG: <= goes too far
{
    Console.WriteLine(arr[i]);
}

IndexOutOfRange

يؤدي هذا الخطأ بمقدار واحد إلى IndexOutOfRangeException.

يتجنب foreach هذا الخطأ بالكامل لأنه لا يستخدم فهرسًا مطلقًا. فَضّله عندما تحتاج إلى قراءة العناصر فقط.

string[] arr = { "a", "b", "c" };
for (int i = 0; i < arr.Length; i++) // correct: < Length
{
    Console.WriteLine(arr[i]);
}

توقّع تغيير العناصر باستخدام foreach

لا يؤدي إسناد قيمة إلى متغير الحلقة إلى تغيير المجموعة، وبالنسبة إلى أنواع القيمة، يكون هذا المتغير نسخةً على أي حال.

لتحديث العناصر، استخدم حلقة for مع الفهرسة.

int[] nums = { 1, 2, 3 };
for (int i = 0; i < nums.Length; i++)
{
    nums[i] = nums[i] * 10;
}
Console.WriteLine(string.Join(",", nums));

مجموعة بقيمة null

يؤدي استدعاء foreach على مرجع قيمته null إلى طرح NullReferenceException.

المجموعة الفارغة مقبولة، لكن null ليست كذلك. تحقّق من المجموعة أو ابدأ تهيئتها قبل التكرار.

List<int> data = null;
if (data != null)
{
    foreach (var x in data) Console.WriteLine(x);
}

الالتباس حول نطاق المتغير

لا يوجد متغير الحلقة إلا داخل جسم الحلقة.

تؤدي محاولة استخدامه بعد الحلقة إلى خطأ في الترجمة، لأنه يصبح خارج النطاق بمجرد انتهاء الحلقة.

foreach (var n in nums)
{
    Console.WriteLine(n);
}
// Console.WriteLine(n); // ERROR: n not in scope here

نسيان الأقواس المعقوفة

من دون الأقواس المعقوفة، ينتمي إلى الحلقة التصريح المفرد التالي فقط.

قد يؤدي ذلك إلى إفساد المنطق دون ظهور خطأ واضح. استخدم الأقواس المعقوفة دائمًا مع الأجسام متعددة الأسطر لتوضيح القصد.

foreach (var n in nums)
    Console.WriteLine(n);
    Console.WriteLine("runs once, not per item");

خطر الحلقة اللانهائية في while

على خلاف foreach، يمكن لحلقة while أن تعمل إلى ما لا نهاية إذا لم يصبح شرطها خاطئًا مطلقًا.

تأكد دائمًا من أن شيئًا ما داخل الحلقة يتقدم نحو شرط الخروج.

int i = 0;
while (i < 3)
{
    Console.WriteLine(i);
    i++; // forgetting this would loop forever
}

اختيار الحلقة المناسبة

قراءة كل عنصر من دون الحاجة إلى فهرس → foreach.

الحاجة إلى الفهرس أو ضرورة التعديل في المكان نفسه → for. التكرار حتى يتغير شرط → while.

تحقق سريع

اختبر ما تعلمته عن أخطاء التكرار.

مراجعة

تعلمت تجنب تعديل مجموعة أثناء foreach، وأخطاء المقدار الواحد مع <=، والمجموعات التي قيمتها null، والالتباس حول النطاق.

اختر foreach للقراءة، وfor للتعديل باستخدام الفهرس، وwhile للحلقات المعتمدة على شرط مع تحديد واضح للخروج.

الأسئلة الشائعة

هل درس «أخطاء التكرار الشائعة» مجاني؟

نعم — نص درس «أخطاء التكرار الشائعة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.

ماذا ستتعلم في «أخطاء التكرار الشائعة»؟

تعديل المجموعة أثناء التكرار تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟

لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «أخطاء التكرار الشائعة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟

نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. حلقة foreach
  2. التكرار على المجموعات
  3. break وcontinue
  4. أخطاء التكرار الشائعة
← العودة إلى C# Academy