الخميس، 21 فبراير 2019

الفرق بين int.Parse() و int.TryParse() بلغة C#

من اسئلة الانترفيو للمتقدين لشغل وظيفة مبرمج C# 

ما هو الفرق بين int.Parse() و int.TryParse()

الاجابة :

كلا التعبيرين يستخدمان في تحويل النصوص الى ارقام (طبعا لو ان النص بالكامل مكون من ارقام) ،
ولكن لان بعض خصائص ادوات البرنامج تعطي نصوص حتى لو ان كل النص ارقام مثل خاصية Text في اداة TextBox ،
وبما ان لغة C# لا تفوم بالتحويل التلقائي بين انواع البيانات كلغة VB.net ، فكان من الواجب تحويل القيمة المرسلة من الخاصية الى رقم ليتم استخدامه كرقم.

اذا ما الفرق بين التعبيرين:
الفرق ان التعبير الاول int.Parse() يقوم بالتحويل مباشرة بدون التأكد ان النص المرسل بالكامل ارقام ، وفي حالة ارسال نص مكون من ارقام واحرف او علامات فيعطي البرنامج خطا تشغيل.

اما التعبير الثاني int.TryParse() يتم التحقق من ان النص المرسل بالكامل ارقام ، ويمكنك ارسال رسالة للمستخدم في حالة وجود نص ليس رقم بالكامل.

امثلة 
النص 123 في حالة تحويله
اولا: بالتعبير الاول int.Parse() يتم التحويل كالتالي:
int.Parse("123")
فسيتم ارسال النص بدون مشاكل لان كل النص عبارة عن ارقام
اما لو اردنا عمل تحويل للنص 123abc فلو كتبنا التالي:
int.Parse("123abc ")
فسيعطينا البرنامج خطأ لعدم التمكن من تحويل النص بالكامل الى ارقام

اذن كيف نستخدم التعبير الثاني int.TryParse() للتحقق من النص
نعرف متغير نصي ومتغير رقمي اولا :
string str = "123abc"
int MyVal = 0;

ثم نقوم بعمل متغير bool ونكتب الجملة التالية بحيث لو النص بالكامل ارقام يعطي true اما لو لم يكن ارقام بالكامل يعطي false:

bool MyTest = int.TryParse(str, out MyVal );

لاحظ ان كلمة out ثابتة ولو ان النص بالكامل ارقام سيتم اعطاء القيمة الرقمة في المتغير MyVal  ويمكنك استخدامه في باقي الكود كالتالي:
if(MyTest == true){
        int MyResult = MyVal *2;
}
ويمكن ارسال رسالة للمستخدم في حالة وجود حروف او نصوص غير رقمية في النص في جملة else
if(MyTest == true){
        int MyResult = MyVal *2;
}else{
        MessageBox.Show("النص المدخل غير صالح");
}