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 อาจมีราคาแพง ลากดึงประสิทธิภาพลงถ้าถูกโยนอย่างไม่มีข้อควรระวัง ดังนั้น เราจึงใช้พวกมันสำหรับกรณีที่ไม่ธรรมดา เว้นแต่การควบคุมโลจิกประจำวัน