البرمجة

حل مشكلة IndexOutOfRangeException في تقسيم السلاسل باستخدام C#

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

أولاً وقبل كل شيء، يجب علينا أن نلاحظ أنك قد قمت بتخصيص المصفوفة values كمصفوفة ذات حجم 3، ثم قمت بتعيين قيمة جديدة لها باستخدام line.Split(';'). هذا يعني أن حجم المصفوفة قد تغير إلى عدد العناصر في نتيجة الانقسام. إذا كانت السلسلة الأصلية line لديها أكثر من 3 عناصر، فإن values ستكون أكبر من 3، وهذا قد يؤدي إلى حدوث IndexOutOfRangeException عند محاولة الوصول إلى عناصر لا تتوفر.

لحل هذا المشكلة، يمكنك استخدام مصفوفة ديناميكية بدلاً من تخصيص حجم ثابت. يمكنك استخدام List بدلاً من String[] لتجنب هذا الخطأ. إليك كيف يمكنك تحسين الشيفرة:

csharp
List<string> values = new List<string>(); values.AddRange(line.Split(';')); Console.Write("Val:" + string.Join(", ", values));

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

المزيد من المعلومات

بالطبع، سأوسع المحتوى لتوضيح المزيد من المعلومات بخصوص الكود ومشكلة IndexOutOfRangeException.

في الشيفرة التي قدمتها، يظهر أنك تقوم بتخصيص مصفوفة values باستخدام new String[3]، ولكن في السطر التالي، أنت تعيد تعيين قيمة values باستخدام line.Split(';')، الذي يقوم بتقسيم السلسلة بناءً على فاصلة منقوطة (;). إذا كان عدد العناصر في السلسلة line أكثر من 3، فستتجاوز المصفوفة الحجم الذي تم تخصيصه لها مسبقًا.

هنا يأتي دور الاستثناء IndexOutOfRangeException الذي يحدث عندما تحاول الوصول إلى عنصر خارج النطاق المخصص للمصفوفة. لتجنب هذا الخطأ، يجب أن يكون لديك عدد ثابت من الفاصلات في السلسلة line لضمان أن المصفوفة لن تتجاوز الحجم المخصص لها.

يمكنك استخدام List كما ذكرت في الرد السابق، أو يمكنك أيضًا التحقق من عدد العناصر قبل الوصول إليها باستخدام شرط، مثل:

csharp
String[] values = new String[3]; values = line.Split(';'); if (values.Length >= 3) { Console.Write("Val:" + values[0] + ", " + values[1] + ", " + values[2]); } else { Console.Write("Invalid input: Not enough elements in the array."); }

بهذا الشكل، تتحقق من وجود عدد كافٍ من العناصر قبل الوصول إليها، وبالتالي تقلل من فرص حدوث استثناء IndexOutOfRangeException.

زر الذهاب إلى الأعلى