Quali sono le linee guida per lanciare un'eccezione o fallire silenziosamente per argomenti non validi? [duplicare]

2

Se osservi il metodo XContainer.Add (contenuto dell'oggetto) puoi vedere quell'id non richiede content per non essere nullo.
Non fa nulla in caso di null.
Tuttavia List.AddRange (raccolta IEnumerable) richiede un'istanza e genera ArgumentNullException altrimenti. Qui l'autore del codice ha deciso che l'eccezione era più appropriata del silenzio.
Potrebbero implementarlo come:

bool List<T>.AddRange(IEnumerable<T> collection)

e restituisce true solo se la raccolta non è vuota ... ma non è così.

Molto spesso mi chiedo se lanciare o semplicemente non fare nulla in caso di parametri sbagliati. La cue disponibile per me è la domanda: "Può un'eccezione aiutare il cliente della mia funzione a rilevare errori logici e stato di programma inatteso?".
Se rispondo a me stesso: "Sì, può nella maggior parte dei casi d'uso", quindi aderisco al lancio.
Tuttavia, a volte il modo migliore non è molto evidente per me. È un po 'scomodo non avere argomenti forti per favorire un approccio rispetto all'altro.

Apprezzerò qualsiasi raccomandazione valida per selezionare tra queste alternative.

    
posta Pavel Voronin 01.10.2013 - 21:31
fonte

1 risposta

3

The cue available for me is the question: "Can exception help the client of my function to detect logic mistake and unexpected program state?".

E per me è "Va bene per me potenzialmente bloccare l'applicazione del chiamante nel modo più orribile possibile a causa di questo errore?". (Dopo il requisito "C'è un modo per evitare di dover fare questo controllo in primo luogo?")

Diverse persone hanno gusti diversi, e anche diverse applicazioni hanno esigenze diverse - da qui la varietà di comportamenti.

In generale, mi piace buttare presto e spesso per cose che sono chiaramente errori. Gli errori esplosivi sono facilmente individuabili e se l'esplosione è vicina alla causa è facile da diagnosticare. Personalmente starei bene con AddRange(null) di essere un no-op, e farò questo genere di cose per scenari con comportamenti sane che sono probabilmente causati dalla pigrizia piuttosto che dall'incidente.

    
risposta data 01.10.2013 - 21:57
fonte

Leggi altre domande sui tag