کلاس FormatException
نام دوره: زبان سی شارپ مقدماتی
نویسنده: علی مقدم جاه (مدرس دوره)
کلاس FormatException چیست؟
در پست آموزش کلاس Exception، با توضیحات اولیه در رابطه با تفاوت میان ارور و استثنا آشنا شدهاید.
فرض کنید برنامهای نوشتهاید تا سن کاربر را از ورودی دریافت کرده و حاصلضرب آن در ۱۰ را چاپ کند:
Console.Write("Enter your age: ");
int age = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(age*10);
اگر برنامه را در IDE خود اجرا کنید، متوجه میشوید که پس از وارد نمودن سن خود، برنامه بدون هیچ مشکلی اجرا شده و نتیجه حاصل ضرب را در خروجی مشاهده خواهید کرد.
اما فرض کنید که در هنگام ورود عدد به عنوان ورودی، به علت سرعت بالا در تایپ، دستتان بر روی یک دکمه از کاراکترهای غیر عددی رفته و به جای مقدار ۲۶، مقدار ۲ف۶ یا ۲t۶ را وارد کردهاید.
دراینصورت چون عبارات وارد شده از جنس رشته بوده، پس توانایی ذخیره در شناسه age از نوع int را نداشته و سیستم قطعا به شما ارور خواهد داد.
برای جلوگیری از بروز این خطا، باید از دستور try catch استفاده نمایید:
try
{
Console.Write("Enter your age: ");
int age = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(age * 10);
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
همانطور که در قطعه کد بالا مشاهده میکنید، ما قسمتی از کدهای خود را که احتمال بروز خطا یا استثنا داشتند، درون محدوده بلاک try قرار دادهایم، اینکار یعنی داریم به سیستم میفهمانیم که تلاش کن این کدها را اجرا کنی، اگر توانستی کدها را اجرا کنی که چه خوب و بیخیال کدهای داخل بلاک Catch بشو، اما اگه کدهای داخل بلاک try به مشکلی برخوردند، حالا کدهای داخل بلاک catch را اجرا کن.
همچنین در محدوده بلاک catch، به عنوان ورودی متد WriteLine، پراپرتی Message را توسط شئ ex فراخوانی کردیم.
این پراپرتی، توانایی چاپ علت ارور بوجود آمده را به شکل مناسب و بدون نمایش (لو رفتن) کدهای برنامهنویسی به کاربران را دارد.
شئ ex از کلاس پشت سر خود یعنی Exception تعریف شده است که میبایست حتما در پرانتز Catch نوشته شود.
نکته: اگر نمیدانستید که ممکن است این چند خط کد چه خطایی را بوجود آورند، میتوانید مثل مثال بالا از کلاس Exception تنها استفاده کنید.
اما اگر مثل الان میدانستید که خطای مربوط به تقسیم بر صفر ممکن است بهوجود بیاید، پس بهتر است به جای استفاده از کلاس والد (Exception)، از کلاس فرزند مختص به این استثنا استفاده کنیم:
try
{
Console.Write("Enter your age: ");
int age = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(age * 10);
}
catch (FormatException ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
جهت شرکت در دورههای زبان برنامه نویسی سیشارپ، از کد تخفیف heplc30 استفاده کنید.