من اسئلة الانترفيو للمتقدين لشغل وظيفة مبرمج 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("النص المدخل غير صالح");
}