Il lancio nella classe che mostri è soddisfacente, anche nel costruttore. Questo è spesso disapprovato in C ++ per vari motivi, tuttavia, funziona bene in C #.
Tuttavia dovrai scrivere un codice aggiuntivo per colmare il divario tra l'arresto del costruttore e l'arresto del programma: questo bridge potrebbe informare l'utente reale che l'input non è valido e riprendere a uno stato precedente del programma, chiedendo l'input .
Questo gap è colmato come @RobertHarvey menziona, con una presa, da un certo chiamante (o chiamante del chiamante).
Tuttavia, non è necessario che il chiamante immediato cerchi le eccezioni. Se tutti i chiamanti immediati hanno bloccato tutte le chiamate in try / catch, probabilmente staremmo meglio senza eccezioni (utilizzando invece i codici di errore).
Dovresti cercare di identificare i posti nel codice chiamante dove il fallimento significa che sei in grado di riprovare in qualche modo. C'è un po 'di arte in questo, ma dovresti cercare di pensare in termini di alto livello sul lavoro o parte del lavoro che può essere interrotta quando qualcosa va storto, e cosa potresti voler riprendere o ripetere in questi casi. A volte, pensare a cosa il programma dovrebbe fare dopo, indipendentemente dal fatto che qualche lavoro abbia esito positivo o positivo, ti aiuterà a dirti dove gestire gli errori.
Nella tua domanda stai già indicando l'attività di livello superiore che vuoi riprovare. Ora, potrebbe essere che tu abbia già un loop di alto livello nel tuo programma in modo che quando ottiene un buon input e abbia successo, non si fermi semplicemente, ma chieda all'utente un altro input su cui lavorare. Se non si dispone di un ciclo di questo tipo, è possibile aggiungerne uno. Quel loop di alto livello può essere un buon posto per localizzare il pescato. Ogni iterazione del ciclo ha esito positivo (e informa l'utente e riparte) oppure non riesce e, in caso di errore, intercetta e informa l'utente, quindi torna di nuovo.