كيفية تحويل السلسلة النصية إلى عدد صحيح في C# مع أمثلة عملية

دقائق القراءة: 5

مقدمة: متى تحتاج إلى تحويل النص إلى عدد صحيح في C#؟

يُعد تحويل السلسلة النصية إلى عدد صحيح من العمليات الشائعة جداً عند التعامل مع إدخال المستخدم، أو بيانات JSON، أو استجابات API، أو نتائج التعبيرات النمطية Regular Expressions. لكن التحدي الحقيقي لا يكمن في تنفيذ التحويل فقط، بل في اختيار الطريقة الصحيحة وفقاً لمصدر البيانات ومدى موثوقيتها.

في هذا الدليل التقني، ستتعرف إلى ثلاث طرق أساسية لتحويل النص إلى رقم صحيح في C#، مع فهم الفروق بين int.Parse() وConvert.ToInt32() وInt32.TryParse()، ومتى يُفضّل استخدام كل واحدة منها.

شرح تحويل السلسلة النصية إلى عدد صحيح في لغة سي شارب C# مع أمثلة برمجية

تحديد مصدر البيانات قبل بدء التحويل

قبل استخدام أي دالة تحويل، من المهم أن تسأل: من أين جاءت هذه القيمة النصية؟

قد يبدو تحويل النص "123" إلى رقم أمراً بسيطاً، لكن في التطبيقات الواقعية قد تأتي البيانات من مصادر متعددة، مثل:

  • إدخال المستخدم داخل النماذج أو سطر الأوامر.
  • ملفات نصية أو قواعد بيانات.
  • استجابات من خدمات خارجية عبر API.
  • قيم مستخرجة من بيانات JSON.
  • نتائج تحليل نصوص باستخدام Regular Expressions.

كلما كانت البيانات أقل موثوقية، زادت احتمالية وجود قيم غير صالحة مثل "hello" أو "1.23" أو حتى سلسلة فارغة "".

مستوى الثقة بحسب مصدر البيانات

مصدر البيانات مستوى الثقة أمثلة على المشاكل المحتملة
إدخال المستخدم منخفض "1.23"، "hello"
بيانات JSON متوسط "123.1"، ""
استجابة API متوسط "11,7"، ""
نتائج Regular Expression مرتفع نسبياً تعبير غير دقيق قد يسمح بقيم غير رقمية

ما حجم الرقم الذي تتوقعه؟

لا يكفي أن تعرف أن القيمة رقمية، بل يجب أيضاً معرفة النطاق المتوقع للعدد. في كثير من الحالات يُستخدم النوع Int32 المعروف بالاختصار int، لكن أحياناً تحتاج إلى نوع أصغر أو أكبر.

أشهر الأنواع العددية الصحيحة في C#

النوع الاسم المختصر أكبر قيمة
Int16 short 32767 أو Int16.MaxValue
Int32 int 2,147,483,647 أو Int32.MaxValue
Int64 long 9,223,372,036,854,775,807 أو Int64.MaxValue

إذا كنت تتوقع أرقاماً كبيرة جداً، فقد لا يكون int مناسباً، وعندها يمكنك استخدام long بدلاً منه.

الطريقة الأولى: استخدام int.Parse() عند الثقة العالية بالمدخلات

تُستخدم الدالة int.Parse() عندما تكون واثقاً تماماً أن السلسلة النصية تحتوي على رقم صحيح صالح. هذه الطريقة مباشرة وسريعة، لكنها صارمة؛ فإذا كانت القيمة غير قابلة للتحويل فسيتم إطلاق استثناء Exception.

متى تكون int.Parse() مناسبة؟

  • عندما تكون البيانات قادمة من مصدر موثوق.
  • عندما تكون الصيغة معروفة مسبقاً.
  • عندما تريد أن يفشل البرنامج بوضوح إذا كانت البيانات غير صحيحة.

أمثلة على int.Parse()

الاستخدام النتيجة
int.Parse("123") 123
int.Parse("") يرمي الاستثناء FormatException
int.Parse(null) يرمي الاستثناء ArgumentNullException
int.Parse("123,000") يرمي الاستثناء FormatException
int.Parse("123,000", System.Globalization.NumberStyles.AllowThousands, new System.Globalization.CultureInfo("en-US")) 123000

الميزة المهمة هنا أن int.Parse() يمكنه التعامل مع تنسيقات محلية مختلفة إذا قمت بتحديد CultureInfo وNumberStyles بشكل صحيح.

متى يجب تجنب int.Parse()؟

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

الطريقة الثانية: استخدام Convert.ToInt32() عند الحاجة إلى مرونة أكبر

تُشبه الدالة Convert.ToInt32() إلى حد كبير int.Parse()، لكنها تختلف عنها في نقطة مهمة: إذا كانت القيمة null فإنها تُعيد 0 بدلاً من رمي استثناء.

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

متى تكون Convert.ToInt32() مناسبة؟

  • عندما تتعامل مع قيم قد تكون null.
  • عندما تعمل على أنواع متعددة وليس فقط string.
  • عندما تريد طريقة تحويل مرنة داخل منطق الأعمال البرمجي.

أمثلة على Convert.ToInt32()

الاستخدام النتيجة
Convert.ToInt32("123") 123
Convert.ToInt32("") يرمي الاستثناء FormatException
Convert.ToInt32(null) 0
Convert.ToInt32("123,000") يرمي الاستثناء FormatException
Convert.ToInt32("1.23") يرمي الاستثناء FormatException
Convert.ToInt32(1.23) 1

من الناحية العملية، يمكن استخدام Convert.ToInt32() لتحويل بعض الأنواع الرقمية ذات الفاصلة العشرية إلى عدد صحيح. ومع ذلك، إذا كان هدفك البرمجي هو إزالة الجزء العشري بوضوح، فمن الأفضل استخدام دوال أكثر تعبيراً مثل Math.Floor() أو ما يناسب منطق التطبيق، لأن ذلك يجعل الكود أوضح وأسهل في الفهم والصيانة.

الطريقة الثالثة: استخدام Int32.TryParse() عند انخفاض الثقة بالبيانات

إذا كنت لا تثق تماماً بمصدر البيانات، فإن الخيار الأفضل غالباً هو Int32.TryParse(). هذه الطريقة لا ترمي استثناء عند فشل التحويل، بل تُعيد قيمة منطقية من النوع bool توضح نجاح العملية أو فشلها.

لهذا السبب تُعد هذه الدالة مثالية عند التعامل مع إدخال المستخدم أو التحقق من صحة البيانات قبل تخزينها أو معالجتها.

لماذا تُعد TryParse() الخيار الأكثر أماناً؟

  • لا تسبب استثناءات عند الإدخال غير الصحيح.
  • تُسهّل كتابة منطق تحقق واضح.
  • مثالية للنماذج وحقول الإدخال واستقبال البيانات الخارجية.

أمثلة على Int32.TryParse()

الاستخدام النتيجة
int number; bool convertible = Int32.TryParse("123", out number) number = 123 وconvertible = true
int number; bool convertible = Int32.TryParse("hello", out number) number = 0 وconvertible = false
int number; bool convertible = Int32.TryParse("", out number) number = 0 وconvertible = false

ويمكنك أيضاً تعريف المتغير داخل الاستدعاء نفسه باستخدام out int number، وهي صيغة شائعة ومختصرة في C#.

مثال عملي مع Console.ReadLine()

while (!Int32.TryParse(Console.ReadLine(), out int number))
{
    Console.WriteLine("Please input number");
}

Console.WriteLine(number);

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

مقارنة سريعة بين Parse وConvert وTryParse

الطريقة أفضل حالة استخدام ماذا يحدث عند الإدخال غير الصالح؟ التعامل مع null
int.Parse() عند الثقة العالية بالبيانات ترمي استثناء ترمي ArgumentNullException
Convert.ToInt32() عند الحاجة لتحويل مرن قد ترمي FormatException تعيد 0
Int32.TryParse() عند ضعف الثقة بالبيانات تعيد false دون استثناء تعيد false

كيف تختار الطريقة المناسبة في مشروعك؟

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

  1. استخدم int.Parse() إذا كنت تعرف مسبقاً أن القيمة صحيحة 100%.
  2. استخدم Convert.ToInt32() إذا كانت القيمة قد تكون null أو كانت من نوع مختلف عن string.
  3. استخدم Int32.TryParse() إذا كنت تتعامل مع إدخال مستخدم أو أي مصدر خارجي غير موثوق.

ومن منظور برمجي احترافي، يُفضَّل في أغلب الحالات العملية استخدام TryParse() عند قراءة البيانات من خارج النظام، لأنه يمنحك تحكماً أفضل في الأخطاء ويجعل التطبيق أكثر استقراراً.

أفضل ممارسات عند تحويل النص إلى رقم في C#

  • تحقق دائماً من مصدر البيانات قبل اختيار أسلوب التحويل.
  • لا تعتمد على الاستثناءات كآلية رئيسية للتحقق من صحة إدخال المستخدم.
  • راعِ إعدادات الثقافة المحلية CultureInfo إذا كنت تتعامل مع أرقام تحتوي على فواصل أو صيغ محلية.
  • اختر النوع العددي المناسب مثل int أو long حسب حجم القيم المتوقعة.
  • اجعل الكود واضحاً: إذا كان الهدف تقريب الرقم أو إزالة الجزء العشري، فاستخدم دوالاً تعبّر عن ذلك بوضوح.

الخلاصة التقنية

تحويل السلسلة النصية إلى عدد صحيح في C# ليس مجرد مسألة كتابة دالة تحويل، بل هو قرار تقني يرتبط بجودة البيانات وسياق الاستخدام. إذا كانت المدخلات موثوقة فاستخدام int.Parse() مناسب، وإذا احتجت مرونة إضافية فاختر Convert.ToInt32()، أما إذا كنت تبحث عن الأمان والاستقرار عند التعامل مع بيانات خارجية فستظل Int32.TryParse() الخيار الأكثر عملية واحترافية في معظم التطبيقات الواقعية.

اترك تعليقاً

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