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("Caught an error: " + e.Message);
        }
    }
}

דוגמת פלט כאשר הדברים לא הולכים כצפוי:

Caught an error: Index was outside the bounds of the array.

עכשיו נוסיף בלוק finally - זה מה שקורה לא משנה מה, כמו לשלם מסים.

try {
    // קוד עלול לגרום לבעיות כאן
} catch (SomeSpecificException e) {
    // טיפול בשגיאה ספציפית כאן
} finally {
    // קוד זה ירוץ ללא תלות במה שקורה למעלה
    Console.WriteLine("This always runs.");
}

צלילה לעומק

ניהול שגיאות הוא חלק משפת C# מאז יצירתה. לאורך הזמן, התפתח. בימים הראשונים, מתכנתים הסתמכו על קודי החזרה או דגלים גלובליים לאיתות על בעיות - מסורבל ועלול לשגיאות.

C# משתמשת בחריגות, גישה יותר מודרנית. חריגה נזרקת כשקורה הלא צפוי, בדיוק כמו זריקת דגל במשחק כדורגל. ניהול חריגות מובנה עם בלוקים של try, catch ו- finally הופך את ניהול רגעים אלו לברור ולנקי יותר מאשר בדיקת שגיאה מהסוג הישן.

אלטרנטיבות? בטח. יש את UnhandledExceptionEventHandler לחריגות שזלגות דרך. או בקוד אסינכרוני, ניהול שגיאות מתהפך קצת עם אובייקטים של Task שנושאים עימם את המטען שלהם של חריגות.

פרטי היישום - שקולים לקטנות דפוס - קריטיים. חריגות עלולות להיות מושכות במשאבים, ולהאט את הביצועים אם נזרקות בקלות ראש. לכן, אנו משתמשים בהן למקרים חריגים, ולא לשליטה לוגית שוטפת.

ראה גם