foreach
string[] plants = { "leaf", "mint" }; يخزّن كلمتين. ثم foreach (string plant in plants) يسلّم كل كلمة إلى الاسم plant، وConsole.WriteLine(plant) يكتبها. الشاشة تُظهر سطرين: leaf، ثم mint. لا تكتب عدّاد فهرس في هذه الصفحة. أبقِ اسم الصنف العام Pine.
اسم واحد لكل قيمة في المصفوفة
افتح ملف Pine. اسم الصنف يبقى Pine. هذه الصفحة لا تعيد تسمية النوع. احذف أي for فيه break أو continue إن بقي ذلك الشكل. احذف for معدودًا مثل for (int i = 1; i <= 5; i = i + 1) إن كان ما زال هناك. احذف أي سطر ReadLine. الملف الذي تحتفظ به بلا انتظار للكتابة، بلا break مبكر، وبلا عدّاد فهرس. الشاشة تُكتب فقط بسطر الكتابة داخل أقواس foreach المعقوفة.
داخل Main، خزّن المصفوفة أولًا: string[] plants = { "leaf", "mint" };. ذلك السطر لا يكتب الشاشة. هو فقط يحتفظ بكلمتين تحت الاسم plants. ثم الحلقة:
foreach (string plant in plants) {
Console.WriteLine(plant);
}
كلمة foreach بحروف صغيرة، مكتوبة كلمة واحدة. داخل الأقواس المستديرة يجلس نوع العنصر string، والاسم plant لعنصر واحد، وكلمة in، ثم اسم المصفوفة plants. ذلك in ليس مسارًا وليس تسمية case. هو يعلّم «كل قيمة من plants تدخل في plant.» الأقواس المعقوفة تحمل الجسم. Console.WriteLine(plant); يكتب الكلمة الحالية بلا اقتباس حول plant. احفظ الملف.
الملف الذي تحتفظ به
أبقِ هذا الشكل التعليمي. string[] واحد اسمه plants يحوي leaf ثم mint. foreach واحد مع string plant in plants. سطر كتابة واحد يكتب الاسم العاري plant. لا يوجد فهرس i، ولا break، ولا اقتباس حول plant.
using System;
public class Pine
{
public static void Main()
{
string[] plants = { "leaf", "mint" };
foreach (string plant in plants)
{
Console.WriteLine(plant);
}
}
}
اقرأه من الأعلى. using System; يجهّز الأسماء القصيرة. public class Pine يسمّي النوع. public static void Main() حيث يبدأ وقت التشغيل. string[] plants = { "leaf", "mint" }; يخزّن كلمتين. foreach (string plant in plants) يمرّ عليهما. Console.WriteLine(plant); يكتب كل كلمة. سطران على الشاشة: leaf، ثم mint.
شغّله بـ dotnet run. البرنامج يكتب سطرين ويتوقف. لا ينتظر أن تكتب شيئًا. إذا انتظر dotnet run، فما زال ReadLine في الملف. احذف ذلك السطر وأبقِ المصفوفة مع foreach أعلاه. الشاشة تُظهر leaf، ثم mint. إذا أظهرت الشاشة leaf فقط، فقد تكون ما زلت على صفحة المصفوفات التي تكتب plants[0] مرة واحدة. استبدل ذلك بـ foreach. إذا أظهرت الشاشة حروف plant في كل سطر، فسطر الكتابة فيه اقتباس: Console.WriteLine("plant");. إذا أظهرت الشاشة foreach كحروف، فسطر كتابة يضع اقتباسًا حول تلك الكلمة. لا تعيد تثبيت .NET SDK لشاشة تُظهر أسطرًا خاطئة.
امشِ تشغيلًا كاملًا بالترتيب. plants يحوي leaf، ثم mint. المرور الأول يضع plant على leaf وسطر الكتابة يكتب leaf. المرور الثاني يضع plant على mint ويكتب mint. ثم لا تبقى قيم، فتنتهي الحلقة. لم تكتب int i = 0 أو i < plants.Length في هذه الصفحة. رأس foreach يطلب من C# زيارة كل قيمة مخزّنة مرة واحدة. الاسم plant يُعلن مرة واحدة في الرأس كـ string plant.
مرّ على مصفوفة int بنفس الشكل
غيّر المصفوفة المخزّنة ونوع العنصر بحيث تكون كل قيمة عددًا صحيحًا. استخدم int[] slots = { 2, 4, 6 }; وforeach (int n in slots) مع Console.WriteLine(n); في الجسم. الآن يجب أن تُظهر الشاشة ثلاثة أسطر: 2، ثم 4، ثم 6. كلمة in ما زالت تجلس بين اسم العنصر واسم المصفوفة. الجسم ما زال يكتب الاسم الذي يحمل عنصرًا واحدًا.
using System;
public class Pine
{
public static void Main()
{
int[] slots = { 2, 4, 6 };
foreach (int n in slots)
{
Console.WriteLine(n);
}
}
}
هذا الملف الثاني. ليس الملف الذي تحتفظ به. شغّل dotnet run. الشاشة تُظهر ثلاثة أسطر. استبدلت مصفوفة string بمصفوفة int ووافقت نوع اسم العنصر مع int. بعد أن ترى 2 و4 و6، أعد الملف المحتفظ به: plants مع foreach (string plant in plants). النسختان C# صالحتان. تعلّمان نفس شكل foreach بأنواع عناصر مختلفة.
اقرأ تشغيل int مرة أخرى. slots يحوي 2، ثم 4، ثم 6. المرور الأول يضع n على 2 ويكتبه. المرور الثاني يضع n على 4 ويكتبه. المرور الثالث يضع n على 6 ويكتبه. ثم تنتهي الحلقة. لا اقتباس حول الأعداد داخل أقواس المصفوفة المعقوفة. Console.WriteLine(n) بلا اقتباس حول n يكتب تلك الأعداد المخزّنة على الشاشة.
قواعد تُبقي foreach واضحًا
يجب أن تحمل الأقواس المستديرة النوع، والاسم، وin، واسم المصفوفة بهذا الترتيب. كتابة foreach (string plant plants) بلا in تجعل البناء يكتب خطأ. نوع العنصر يجب أن يوافق المصفوفة: string مع مصفوفة string، وint مع مصفوفة int. وضع string plant بجانب مصفوفة int[] ليس الشكل الذي يبنيه هذا الدرس. الأقواس المعقوفة ما زالت تحمل الجسم عندما يكون للجسم سطر واحد أو أكثر.
foreach ليس for المعدود من الصفحة الأسبق، وليس break من الصفحة السابقة. for المعدود كتب بداية واختبارًا وخطوة بعدّاد. foreach يمرّ على قيم مخزّنة أصلًا في مصفوفة. break ينهي حلقة مبكرًا؛ عرض هذه الصفحة الأول يكتب كل قيمة. لا تترك عرض break أو while بسيطًا في نفس Main وتتساءل لماذا تُظهر الشاشة 1 و2 بدل leaf وmint. يجب أن يحمل Main في هذه الجلسة المصفوفة وforeach فقط.
خلط شائع هو كتابة الصياغة نفسها: Console.WriteLine("foreach");. ذلك يكتب حروف foreach. لا يمرّ على المصفوفة. خلط آخر هو Console.WriteLine("plant"); مع اقتباس، فيكتب كلمة plant في كل مرور بدل leaf وmint. أبقِ Console.WriteLine(plant) بلا اقتباس عندما تريد قيمة العنصر على الشاشة.
إذا لم يكن للمصفوفة عناصر — مثلًا string[] plants = { }; — فالجسم لا يعمل أبدًا وتبقى الشاشة فارغة. ذلك ما زال foreach صالحًا؛ عروض هذا الدرس تحتفظ بقيمتين على الأقل حتى ترى الأسطر المكتوبة. عندما تحتاج لاحقًا رقم فهرس على الشاشة، يعود for المعدود؛ foreach لزيارة القيم بلا إدارة ذلك الفهرس بنفسك. تغيير قيمة داخل الحلقة بـ plant = "stem"; لا يعيد كتابة خانة المصفوفة في هذا الشكل للمبتدئين — عامل plant كقيمة تقرأها للكتابة، لا كأداة لتعديل plants.
يمكنك الآن تخزين مصفوفة، وكتابة foreach (Type name in arrayName)، وكتابة كل قيمة مرة. موافقة نوع العنصر للمصفوفة تُبقي الحلقة قابلة للبناء. الصفحة التالية هي methods، حيث تجمع الأسطر تحت اسم تستدعيه من Main.
الشاشة هي كل قيمة في المصفوفة
الملف الذي تحتفظ به يكتب leaf، ثم mint. الاسم plant في سطر الكتابة، وحروف plant ليست على الشاشة كتسمية. كلمة in داخل الأقواس المستديرة، وin ليس على الشاشة. الاقتباس حول plant أو حول foreach يكتب حروفًا، لا مرور المصفوفة.
🧠 اختبر معرفتك
اختبر معرفتك
تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع
📝 التعليمات
- اقرأ كل سؤال بعناية
- اختر أفضل إجابة لكل سؤال
- يمكنك إعادة الاختبار عدة مرات كما تريد
- سيتم عرض تقدمك في الأعلى