فرشته نگهبان به نام checked
خوشبختانه، #C راه حل این فاجعه سایلنت رو در اختیار ما گذاشته.
اپراتور checked.
هر عبارتی که داخل checked قرار بگیره، در صورت سرریز شدن، به جای رفتار سایلنت، یک خطای واضح و مشخص به نام OverflowException پرتاب میکنه.
int a = 1_000_000;
int b = 1_000_000;
try
{
// این عبارت رو برای سرریز شدن چک کن
// حاصل ضرب از ظرفیت int بیشتر میشه
int c = checked(a * b); // اینجا استثنا (Exception) رخ میده!
Console.WriteLine(c);
}
catch (OverflowException)
{
Console.WriteLine("Overflow detected! Calculation aborted.");
}
نکته حرفهای: میتونید این قابلیت رو در تنظیمات پروژه برای کل برنامه فعال کنید و هرجا که خواستید رفتار سایلنت رو داشته باشید، از unchecked استفاده کنید.
و اما unchecked: وقتی میخوایم خطر کنیم!
int x = int.MaxValue;
// این عملیات چک نمیشه و به حالت سایلنت برمیگرده
int y = unchecked(x + 1);
unchecked
{
// تمام عبارات این بلوک هم چک نمیشن
int z = x + 1;
}
🤔 حرف حساب و تجربه شما
شناختن این رفتارها و استفاده از checked، مرز بین کدنویسی آماتور و حرفهایه.
🔖 هشتگها :
#CSharp
#DotNet
#Bugs