Per quanto è più corretto? Come suggerisce il commento di Kirk: dipende. A volte un null
ha senso logico ea volte un'eccezione è più adatta se nessun valore predefinito è ragionevole. Una cosa che provo a fare è pensare "sta chiamando GetCurrentItem
un errore logico o una cosa sicura?"
Se non è possibile chiamare GetCurrentItem
quando non ce ne sono, lanciare un'eccezione è la rotta corretta. Ad esempio, se la tua raccolta ha una proprietà HasCurrent
o IsEmpty
in cui qualcuno potrebbe esaminare il risultato prima di chiamare GetCurrentItem
, allora dovrebbe "conoscere meglio". Ma se l'elemento corrente è null
è un modo logico corretto di utilizzare la classe, quindi progettarlo in quel modo. In entrambi i casi, documenterei il comportamento nei commenti di codice per consentire agli utenti di conoscere il comportamento previsto.
Lo dirò comunque, esponendo l'eccezione ArgumentOutOfRange
potrebbero verificarsi errori di implementazione. Cioè, se l'utente di questa classe non ha idea che la struttura interna sia una matrice o List<T>
, allora non escludere quell'eccezione, ma catturarla, avvolgerla e lanciarne una più significativa (personalizzato, o qualcosa di simile InvalidOperationException
).
Dal momento che non stanno passando davvero direttamente in un argomento, inducendole un'eccezione ArgumentOutOfRange
potrebbe essere fonte di confusione :-)
fonte
2012-06-22 17:10:22
Qual è l'API corretto: 'Enumerable.Single' o' Enumerable.SingleOrDefault'? (risposta: dipende) –