Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

วิธีจับข้อยกเว้นการหารด้วยศูนย์ใน C#

การจัดการ 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) มักดีกว่าการจับข้อยกเว้น เพราะมีประสิทธิภาพดีกว่าและโค้ดอ่านง่ายกว่า