أنواع الاستثناءات
جزء من قسم المنطق وتدفق التنفيذ في رحلة 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);
}التحدي
سهلقم بإنشاء دالة باسم ProcessArray تقوم بما يلي:
- تأخذ مصفوفة من الأعداد الصحيحة وفهرسًا (index) كمعاملات
- تحاول الوصول إلى العنصر عند الفهرس المحدد
- تعيد قيمة العنصر في حال النجاح
- إذا حدث
IndexOutOfRangeException، قم بالتقاطه وإعادة -1
يجب أن يكون للدالة التوقيع (signature) التالي:
public static int ProcessArray(int[] array, int index)جرّب بنفسك
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);
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادتعريف وتهيئة المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفة ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادالمصفوفات المتعرجة (Jagged Arrays)عمليات المصفوفات الشائعةمراجعة - المصفوفات متعددة الأبعاد4تقنيات التحكم في التدفق
الإرجاع المبكرشروط الحمايةجمل القفز (goto)Break و Continueتسطيح الشروط المتداخلة7المعاملات المنطقية المتقدمة
التقييم المختصرالمعاملات المنطقية الشرطيةأولوية المعاملاتمراجعة - المعاملات المتقدمة2اتخاذ القرارات المتقدم
الشروط المتعددةالمنطق البولياني المعقدمقارنة بين If و Switchجمل Switch المتداخلةمراجعة - القرارات المتقدمة5معالجة الاستثناءات
أساسيات Try-Catchأنواع الاستثناءاتكتل Catch المتعددةالتعامل مع الملفاتكتلة FinallyUsing مقابل Try-Finallyاستثناءات مخصصةمراجعة - معالجة الأخطاء8نظام تحليل البيانات
إعداد جمع البياناتمنطق إدخال البيانات11HashSet الجزء الأول
ما هو الـ HashSet؟إضافة عنصرحذف عنصرالتحقق من وجود عنصرالفراغ والحجمملخص - HashSet3تحسينات الحلقات التكرارية
أداء الحلقات التكراريةالتكرار عبر البيانات المعقدةأنواع الحلقات التكراريةإعادة هيكلة الحلقات التكراريةملخص - الحلقات المحسنة6التعامل مع الـ Null
أساسيات الـ Null Referenceأنواع القيم القابلة للـ Nullأنماط التحقق من الـ Nullالبرمجة الدفاعيةملخص - أمان الـ Nullتدرّب بنفسك: مترجم C# عبر الإنترنت