การจัดการ DivideByZeroException ใน C#
ใน C# การหารตัวเลขด้วยศูนย์จะทำให้เกิดข้อยกเว้น System.DivideByZeroException ซึ่งเป็นคลาสที่สืบทอดมาจาก ArithmeticException คุณต้องใช้บล็อก try-catch เพื่อจับและจัดการข้อยกเว้นนี้
ตัวอย่างโค้ดสมบูรณ์
using System;
namespace ErrorHandlingApplication
{
class DivNumbers
{
int result;
DivNumbers()
{
result = 0;
}
public void Division(int num1, int num2)
{
try
{
result = num1 / num2;
}
catch (DivideByZeroException e)
{
Console.WriteLine("ข้อยกเว้นถูกจับ: {0}", e.Message);
}
finally
{
Console.WriteLine("ผลลัพธ์: {0}", result);
}
}
static void Main(string[] args)
{
DivNumbers d = new DivNumbers();
d.Division(25, 0);
Console.ReadKey();
}
}
}
ผลลัพธ์
ข้อยกเว้นถูกจับ: Attempted to divide by zero.
ผลลัพธ์: 0
จุดสำคัญ
- try: บล็อกโค้ดที่อาจเกิดข้อยกเว้น
- catch (DivideByZeroException): จับข้อยกเว้นเฉพาะการหารด้วยศูนย์
- finally: ทำงานเสมอ ไม่ว่าจะมีข้อยกเว้นหรือไม่ (เหมาะสำหรับการทำความสะอาดทรัพยากร)
- การหารจำนวนเต็ม (integer) ด้วยศูนย์เท่านั้นที่โยนข้อยกเว้น ส่วน floating-point จะให้ค่า
InfinityหรือNaN
แนวทางป้องกันที่ดีกว่า
public void SafeDivision(int num1, int num2)
{
if (num2 == 0)
{
Console.WriteLine("ไม่สามารถหารด้วยศูนย์ได้");
return;
}
result = num1 / num2;
Console.WriteLine("ผลลัพธ์: {0}", result);
}
การตรวจสอบก่อนหาร (defensive programming) มักดีกว่าการจับข้อยกเว้น เพราะมีประสิทธิภาพดีกว่าและโค้ดอ่านง่ายกว่า