Sobes.tech
Middle

Υπάρχει διαφορά στη σειρά γραφής των μπλοκ catch;

sobes.tech AI

Απάντηση από AI

Ναι, υπάρχει. Τα μπλοκ catch επεξεργάζονται σειριακά. Οι πιο συγκεκριμένες εξαιρέσεις πρέπει να έρχονται πριν από τις πιο γενικές.

try
{
    // Κώδικας που μπορεί να προκαλέσει εξαίρεση
}
// Πιο συγκεκριμένη εξαίρεση
catch (System.FormatException ex)
{
    // Διαχείριση σφάλματος μορφής
}
// Λιγότερο συγκεκριμένη εξαίρεση
catch (System.Exception ex)
{
    // Διαχείριση όλων των άλλων εξαιρέσεων
}

Αν τοποθετήσετε την πιο γενική εξαίρεση πρώτη, τότε το μπλοκ catch πιο συγκεκριμένο δεν θα επιτευχθεί ποτέ για εξαιρέσεις που κληρονομούν από την πιο γενική. Για παράδειγμα, το FormatException κληρονομεί από το Exception. Αν το catch (Exception ex) είναι πρώτο, θα πιάσει και το FormatException.

Λάθος σειρά:

try
{
    // Κώδικας που μπορεί να προκαλέσει εξαίρεση
}
// Γενική εξαίρεση
catch (System.Exception ex)
{
    // Διαχείριση όλων των εξαιρέσεων, συμπεριλαμβανομένου του FormatException
}
// Αυτό το μπλοκ δεν θα επιτευχθεί ποτέ για το FormatException,
// επειδή ήδη πιάστηκε από το προηγούμενο μπλοκ
catch (System.FormatException ex)
{
    // Αυτός ο κώδικας είναι μη προσβάσιμος σε αυτήν την περίπτωση
}

Ο μεταγλωττιστής C# θα εμφανίσει προειδοποίηση ή σφάλμα για ένα αόρατο μπλοκ catch.