C# Programming

تحويل الأعداد الصحيحة إلى قيم تعدادية بأمان في C#

Spread the love

تُعدّ القوائم التعدادية (Enums) أداة قيّمة في C# لتحديد مجموعات من الثوابت المسماة. وغالباً ما ستحتاج إلى تحويل قيمة صحيحة إلى عضو القائمة التعدادية المقابل. تتناول هذه المقالة عدة تقنيات لأداء هذا التحويل بأمان وفعالية، مع التركيز على أفضل الممارسات.

محتويات

الصب المباشر

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


public enum DaysOfWeek
{
    Monday = 1,
    Tuesday = 2,
    Wednesday = 3,
    Thursday = 4,
    Friday = 5,
    Saturday = 6,
    Sunday = 7
}

public class Example
{
    public static void Main(string[] args)
    {
        int dayValue = 3;
        DaysOfWeek day = (DaysOfWeek)dayValue;
        Console.WriteLine(day); // مخرجات: Wednesday

        // هذا سيُلقي باستثناء وقت التشغيل إذا لم تكن dayValue عضواً صالحاً في القائمة التعدادية.
        int invalidDayValue = 10;
        DaysOfWeek invalidDay = (DaysOfWeek)invalidDayValue; 
        Console.WriteLine(invalidDay); 
    }
}

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

استخدام Enum.Parse

يوفر Enum.Parse حلاً أكثر قوة. يأخذ نوع القائمة التعدادية و التمثيل النصي للعدد الصحيح كمدخلات، ويعيد عضو القائمة التعدادية المقابل. يُلقي باستثناء ArgumentException إذا لم تكن القيمة الصحيحة قيمة قائمة تعدادية مُعرّفة.


public class Example
{
    public static void Main(string[] args)
    {
        int dayValue = 3;
        try
        {
            DaysOfWeek day = (DaysOfWeek)Enum.Parse(typeof(DaysOfWeek), dayValue.ToString());
            Console.WriteLine(day); // مخرجات: Wednesday
        }
        catch (ArgumentException)
        {
            Console.WriteLine("قيمة قائمة تعدادية غير صالحة.");
        }
    }
}

Enum.Parse أكثر أماناً من الصب المباشر لأنه يعالج المدخلات غير الصالحة بشكل صريح، مما يمنع الانهيارات غير المتوقعة. ومع ذلك، فإن معالجة الاستثناءات تضيف عبئاً إضافياً.

استخدام Enum.IsDefined

لتحسين الكفاءة والأمان، تحقق من وجود الرقم الصحيح ضمن القائمة التعدادية باستخدام Enum.IsDefined قبل استدعاء Enum.Parse.


public class Example
{
    public static void Main(string[] args)
    {
        int dayValue = 3;
        if (Enum.IsDefined(typeof(DaysOfWeek), dayValue))
        {
            DaysOfWeek day = (DaysOfWeek)Enum.Parse(typeof(DaysOfWeek), dayValue.ToString());
            Console.WriteLine(day); // مخرجات: Wednesday
        }
        else
        {
            Console.WriteLine("قيمة قائمة تعدادية غير صالحة.");
        }
    }
}

يُجمع هذا بين أمان Enum.Parse وفحص الصلاحية الأولي، مما يقلل من فرصة حدوث استثناءات.

استخدام Enum.TryParse

Enum.TryParse هو النهج المُوصى به. يحاول التحويل، ويعيد قيمة منطقية تشير إلى النجاح أو الفشل دون إلقاء استثناءات. هذا يجعل معالجة الأخطاء أنظف وأكثر كفاءة.


public class Example
{
    public static void Main(string[] args)
    {
        int dayValue = 3;
        DaysOfWeek day;
        if (Enum.TryParse(dayValue.ToString(), out day))
        {
            Console.WriteLine(day); // مخرجات: Wednesday
        }
        else
        {
            Console.WriteLine("قيمة قائمة تعدادية غير صالحة.");
        }
    }
}

Enum.TryParse هي الطريقة الأكثر قوة والأفضل تفضيلاً نظرًا لمعالجة الأخطاء الخالية من الاستثناءات وكفاءتها.

الخاتمة

توجد طرق متعددة لتحويل الأعداد الصحيحة إلى قوائم تعدادية في C#. بينما يُعد الصب المباشر مُوجزاً، إلا أنه الأقل أماناً. يوفر Enum.Parse معالجة قائمة على الاستثناءات، ويضيف Enum.IsDefined فحصاً وقائياً. ومع ذلك، فإن Enum.TryParse يبرز كحل أكثر قوة وكفاءة، حيث يوفر معالجة أخطاء نظيفة خالية من الاستثناءات. اختر الطريقة التي تناسب سياقك بشكل أفضل، مع إعطاء الأولوية دائماً للأمان والصيانة. تعامل مع الأخطاء المحتملة بشكل سلس لمنع سلوك التطبيق غير المتوقع.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *