C#:
การจัดการกับข้อผิดพลาด

วิธีการ:

เราเริ่มต้นด้วยบล็อก try-catch มันเหมือนกับการวางตาข่ายนิรภัยไว้ใต้ผู้เดินบนเชือกลม ถ้าพวกเขาลื่น พวกเขาจะไม่ตกลงไป - พวกเขาจะถูกจับ

using System;

class ErrorHandlingExample {
    static void Main() {
        try {
            int[] numbers = {1, 2, 3};
            Console.WriteLine(numbers[5]);  // อุ๊ปส์, ดัชนีเกินขอบเขต!
        } catch (IndexOutOfRangeException e) {
            Console.WriteLine("จับข้อผิดพลาดได้: " + e.Message);
        }
    }
}

ผลลัพธ์ตัวอย่างเมื่อเกิดข้อผิดพลาด:

จับข้อผิดพลาดได้: Index was outside the bounds of the array.

ตอนนี้เราเพิ่มบล็อก finally - มันเป็นสิ่งที่เกิดขึ้นไม่ว่าอย่างไรก็ตาม เหมือนกับการจ่ายภาษี

try {
    // โค้ดที่อาจมีปัญหาที่นี่
} catch (SomeSpecificException e) {
    // จัดการกับข้อผิดพลาดนั้นๆ ที่นี่
} finally {
    // โค้ดนี้จะทำงานไม่ว่าจะเกิดอะไรขึ้นด้านบน
    Console.WriteLine("สิ่งนี้ทำงานเสมอ.");
}

การพิจารณาอย่างลึกซึ้ง

การจัดการข้อผิดพลาดมีอยู่ในภาษา C# ตั้งแต่เริ่มแรก ตลอดเวลาได้มีการพัฒนา เมื่อก่อนนั้น โปรแกรมเมอร์พึ่งพารหัสการคืนค่าหรือธงโกลบอลเพื่อส่งสัญญาณปัญหา - เป็นวิธีที่ไม่คล่องตัวและมีโอกาสผิดพลาดสูง

C# ใช้ exceptions เป็นวิธีการที่ทันสมัยกว่า ข้อยกเว้นจะถูกโยนออกมาเมื่อเกิดเหตุการณ์ที่ไม่คาดคิด ลักษณะเหมือนกับการโยนธงในการเล่นฟุตบอล Structured exception handling ด้วยบล็อก try, catch และ finally ทำให้การจัดการช่วงเวลาเหล่านี้ชัดเจนและสะอาดกว่าการตรวจสอบข้อผิดพลาดแบบเก่า

มีทางเลือกอื่นหรือไม่? แน่นอน มี UnhandledExceptionEventHandler สำหรับ exceptions ที่ลื่นหลุดมือผ่านไป หรือในโค้ดแบบ async, การจัดการข้อผิดพลาดนั้นบางทีอาจหมุนไปมานิดหน่อยกับอ็อบเจ็กต์ Task ที่พกพาข้อยกเว้นของตัวเอง

รายละเอียดการดำเนินการ—คล้ายกับข้อความเล็กๆ น้อยๆ—มีความสำคัญ Exceptions อาจมีราคาแพง ลากดึงประสิทธิภาพลงถ้าถูกโยนอย่างไม่มีข้อควรระวัง ดังนั้น เราจึงใช้พวกมันสำหรับกรณีที่ไม่ธรรมดา เว้นแต่การควบคุมโลจิกประจำวัน

ดูเพิ่มเติม