مدیریت خطا اختصاصی در سی شارپ توسط Try و Catch
آیا راهی هست که توسط بلوک try و catch به صورت تخصصی خطاها رو مدیریت کرد. منظورم از تخصصی اینه که می خوام بتونم روی خطاها شرط داشته باشم. مثلا فرض کنید در ورودی اگر سن کاربر بیشتر از 80 بود خطا بده یا اگر به جای عدد رشته وارد شد خطا بده.
دقت کنید می خوام در بلوک try و catch این موارد انجام بشه نه با if های تو در تو
پاسخ هوش مصنوعی
برای مدیریت خطا به صورت اختصاصی در C# با استفاده از بلوک های try
و catch
می توانید از throw
برای ایجاد استثناهای سفارشی استفاده کنید. در این مثال، ما ورودی کاربر را بررسی می کنیم و اگر ورودی شرایط خاصی را نداشته باشد، خطا ایجاد می کنیم.
using System;
class Program
{
static void Main()
{
try
{
Console.Write("لطفاً سن خود را وارد کنید: ");
string input = Console.ReadLine();
int age = Convert.ToInt32(input);
if (age < 0 || age > 80)
{
throw new ArgumentOutOfRangeException("سن باید بین 0 و 80 باشد.");
}
Console.WriteLine("سن شما: " + age);
}
catch (FormatException)
{
Console.WriteLine("لطفا یک عدد صحیح وارد کنید.");
}
catch (ArgumentOutOfRangeException ex)
{
Console.WriteLine(ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("خطای غیرمنتظره: " + ex.Message);
}
}
}
در این کد، ابتدا ورودی کاربر را خوانده و تلاش می کنیم آن را به عدد صحیح تبدیل کنیم. اگر ورودی غیر عددی باشد، یک FormatException
ایجاد می شود. همچنین با استفاده از ArgumentOutOfRangeException
می توانیم سن ورودی را بررسی کنیم و در صورتی که خارج از محدوده مجاز باشد، خطا مربوطه را پرتاب کنیم.
آشنایی با Exception های اختصاصی بلوک Catch
بله شما می تونید از طریق Exception های اختصاصی که برای بلوک Catch تعریف شده خطاهاتون رو اختصاصی مدیریت کنید. به عنوان مثال کدهای زیر رو دقت کنید :
try
{
int age = Convert.ToInt32(textBox1.Text);
Console.WriteLine($"You are {age} years old");
}
catch (OverflowException ex)
{
//اگر عدد خیلی بزرگی وارد شد وارد این خطا نمایش داده می شود
Console.WriteLine($"age is invalid");
}
catch (FormatException ex)
{
//اگر رشته وارد شد این خطا نمایش داده می شود
Console.WriteLine($"format is invalid");
}
catch (Exception ex)
{
//اگر خطای هندل نشده ای وجود داشت این خطا نمایش داده می شود
Console.WriteLine($"there is an error");
}
همونطوری که ملاحظه می کنید یک بلوک try داریم و سه بلوک catch که در هر بلوک از catch یک حالت خاص از خطا بررسی شده است. بلوک catch آرگومان های زیادی برای مدیریت خطا دارد مانند :
//اگر خطای تقسیم بر صفر رخ داد
catch (DivideByZeroException ex)
//اگر مقداری خارج از محدوده آرایه ثبت یا واکشی شد
catch (IndexOutOfRangeException ex)
//و ...
شما حتی می تونید در بلوک catch از شرط هم استفاده کنید. برای اطلاعات بیشتر لینک زیر رو مطالعه کنید.
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf
- Library Animation برای کنترلهای WPF
- مشکل در تغییر مقدار Text کنترل RibbonBar در کامپوننت DevExpress
- قرار دادن مقادیر ارسالی یک ستون از جدول به صورت سطری در استیمول