Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

أنواع الاستثناءات

جزء من قسم Logic & Flow في رحلة C# على Coddy — الدرس 24 من 66.

في لغة C#، يتم تصنيف الاستثناءات إلى أنواع مختلفة بناءً على الخطأ الذي تمثله. يساعدك فهم هذه الأنواع على التعامل مع الأخطاء بشكل أكثر فعالية.

لنلقِ نظرة على أنواع الاستثناءات الشائعة:

الفئة الأساسية لجميع الاستثناءات هي System.Exception.

try
{
    // الكود الذي قد يتسبب في حدوث استثناء
}
catch (Exception ex)
{
    // معالجة أي استثناء
    Console.WriteLine(ex.Message);
}

بعض أنواع الاستثناءات الشائعة:

ArgumentException: يتم إلقاؤه عندما يتم استدعاء أسلوب (method) بوسيط غير صالح.

string name = null;
if (name == null)
{
    throw new ArgumentException("Name cannot be null");
}

NullReferenceException: يتم إلقاؤه عندما تحاول الوصول إلى عضو في مرجع فارغ (null).

string text = null;
// سيؤدي هذا إلى إلقاء NullReferenceException
int length = text.Length;

IndexOutOfRangeException: يتم إلقاؤه عندما يكون فهرس المصفوفة خارج حدود المصفوفة.

int[] numbers = { 1, 2, 3 };
// سيؤدي هذا إلى إلقاء IndexOutOfRangeException
int value = numbers[5];

DivideByZeroException: يتم طرحه عند قسمة عدد صحيح على صفر.

int result = 10 / 0; // سيؤدي هذا إلى طرح DivideByZeroException

يمكنك التقاط استثناءات محددة:

try
{
    int[] numbers = { 1, 2, 3 };
    int value = numbers[5];
}
catch (IndexOutOfRangeException ex)
{
    Console.WriteLine("Array index error: " + ex.Message);
}
catch (Exception ex)
{
    Console.WriteLine("General error: " + ex.Message);
}
challenge icon

التحدي

سهل

قم بإنشاء دالة باسم ProcessArray تقوم بما يلي:

  1. تأخذ مصفوفة من الأعداد الصحيحة وفهرسًا (index) كمعاملات
  2. تحاول الوصول إلى العنصر عند الفهرس المحدد
  3. تعيد قيمة العنصر في حال النجاح
  4. إذا حدث IndexOutOfRangeException، قم بالتقاطه وإعادة -1

يجب أن يكون للدالة التوقيع (signature) التالي:

public static int ProcessArray(int[] array, int index)

ورقة مرجعية

الفئة الأساسية لجميع الاستثناءات هي System.Exception:

try
{
    // الكود الذي قد يطرح استثناءً
}
catch (Exception ex)
{
    // معالجة أي استثناء
    Console.WriteLine(ex.Message);
}

أنواع الاستثناءات الشائعة:

ArgumentException: يتم طرحه عند استدعاء دالة بوسيط غير صالح:

string name = null;
if (name == null)
{
    throw new ArgumentException("Name cannot be null");
}

NullReferenceException: يتم طرحه عند الوصول إلى عضو في مرجع فارغ (null):

string text = null;
int length = text.Length; // يطرح NullReferenceException

IndexOutOfRangeException: يتم طرحه عندما يكون فهرس المصفوفة خارج الحدود:

int[] numbers = { 1, 2, 3 };
int value = numbers[5]; // يطرح IndexOutOfRangeException

DivideByZeroException: يتم طرحه عند قسمة عدد صحيح على صفر:

int result = 10 / 0; // يطرح DivideByZeroException

التقاط استثناءات محددة:

try
{
    int[] numbers = { 1, 2, 3 };
    int value = numbers[5];
}
catch (IndexOutOfRangeException ex)
{
    Console.WriteLine("Array index error: " + ex.Message);
}
catch (Exception ex)
{
    Console.WriteLine("General error: " + ex.Message);
}

جرّب بنفسك

using System;

class Program
{
    public static int ProcessArray(int[] array, int index)
    {
        // اكتب كودك هنا
        return 0;
    }

    static void Main(string[] args)
    {
        // قراءة مدخلات المصفوفة
        string input = Console.ReadLine();
        
        // إزالة الأقواس إذا كانت موجودة
        if (input.StartsWith("[") && input.EndsWith("]"))
        {
            input = input.Substring(1, input.Length - 2);
        }
        
        string[] parts = input.Split(',');
        
        int[] array = new int[parts.Length];
        for (int i = 0; i < parts.Length; i++)
        {
            array[i] = int.Parse(parts[i].Trim());
        }
        
        // قراءة مدخلات الفهرس
        int index = int.Parse(Console.ReadLine());
        
        int result = ProcessArray(array, index);
        Console.WriteLine(result);
    }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow