geo1st487 Δημοσ. 25 Αυγούστου 2012 Δημοσ. 25 Αυγούστου 2012 Στον παρακατω κωδικα γινεται διαιρεση με το μηδεν και εκτελειτε το περιεχομενο της catch το οποιο εμφανιζει το μηνυμα του σφαλματος. Πως μπορω να παιρνω καποιο αριθμο σφαλματος και αναλογα με τον αριθμο να εμφανιζω ενα δικο μου μηνυμα ή να κανω μια συγκεκριμενη ενεργεια; Ας πουμε οτι μεσα στην try εχω κωδικα ο οποιος μπορει να πεταξει διαφορα σφαλματα. Πως μπορω να ελεγχω μεσα απο την catch τα σφαλματα και αναλογα με το σφαλμα να εκτελω τον αναλογο κωδικα; Ευχαριστω > int x = 2; int y = 0; int r = 0; try { r = x / y; } catch (Exception ex) { MessageBox.Show(ex.Message); }
moukoublen Δημοσ. 25 Αυγούστου 2012 Δημοσ. 25 Αυγούστου 2012 Αυτό τον σκοπό εξυπηρετούν τα exceptions. Θα σου πρότεινα να βρεις ένα καλό βιβλίο C# και να διαβάσεις τόσο για τον αντικειμενοστραφή όσο και για τα Exceptions. Η σύντομη απάντηση σε αυτό που ζητάς είναι το να διαχωρίσεις τα catches των exceptions ώστε να ξέρεις κάθε φορά τι "πιάνεις". Αλλά θα έλεγα πριν πας στην αμέσως επόμενη και καθαρά τεχνική απορία "πως το κάνω αυτό" καλύτερα να καλύψεις λίγο και το βαθύτερο και ουσιαστικότερο κομμάτι που αφορά την γνώση. Η απάντηση είναι λοιπόν > try { r = x/y; } catch(DivideByZeroException ex) { ... } Αλλά έχει σημασία το γιατί. Και επίσης το γιατί ενώ την ώρα που κάνεις διαίρεση με το μηδέν και πετιέται ένα DivideByZeroException "μπαίνει ο κώδικας" στο catch(Exception ex). Και τι γίνεται όταν θέλουμε να διαχωρίσουμε πολλές περιπτώσεις σφαλμάτων; Ο κωδικός σφάλματος που ανέφερες είναι μια πολύ όμορφη σκέψη ανήκει όμως σε μια άλλη γενιά γλωσσών παλιότερης εποχής και απλούστερης αρχιτεκτονικής από τον αντικειμενοστραφή προγραμματισμό (ενδεχομένως κάποιες φορές να χρησιμοποιείται και εσωτερικά σε ένα exception αλλά αυτό άστο για αργότερα).
defacer Δημοσ. 26 Αυγούστου 2012 Δημοσ. 26 Αυγούστου 2012 Να προσθέσω ότι το catch(Exception ex) είναι σχεδόν πάντα "λάθος" γιατί: Το να γράφεις catch (θα έπρεπε να) είναι ισοδύναμο με το να λες "ξέρω πώς να διαχειριστώ οποιαδήποτε περίπτωση σφάλματος του τάδε exception class" Υπάρχουν αρκετά "γενικά" exception classes (με αποκορύφωμα το System.Exception) τα οποία μπορεί να περιγράφουν πραγματικά οτιδήποτε και για το λόγο αυτό είναι αδύνατον να ξέρεις πώς να τα διαχειριστείς. Σχετικό (δε μπόρεσα να βρω κάτι καλύτερο με σύντομο googling): Avoid handling errors by catching non-specific exceptions, such as System.Exception, System.SystemException, and so on, in application code. There are cases when handling errors in applications is acceptable, but such cases are rare. An application should not handle exceptions that can result in an unexpected or exploitable state. If you cannot predict all possible causes of an exception and ensure that malicious code cannot exploit the resulting application state, you should allow the application to terminate instead of handling the exception. Το τι πρέπει όντως να κάνεις εξαρτάται από την περίπτωση. Στην προκειμένη επειδή το μόνο exception που "περιμένεις" είναι το DivideByZeroException αυτό είναι που πρέπει να γράφει και το catch.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα