Ho il seguente codice che tenta di catturare un riferimento null. Quindi genera un'eccezione con un motivo più chiaro per l'errore specificato nella proprietà del messaggio.IndexNotFoundException versus NullReferenceException
Che tipo di eccezione deve inviare? Un IndexOutOfRangeException
?
var existing = this.GetByItemId(entity.ItemId); // int or long
if (existing == null)
{
throw new IndexOutOfRangeException("The specified item does not exist.");
}
var price = existing.Price;
o uno NullReferenceException
?
var existing = this.GetByItemId(entity.ItemId);
if (existing == null)
{
throw new NullReferenceException("The specified item does not exist.");
}
var price = existing.Price;
oppure, dovremmo lasciare che l'eccezione faccia il suo corso?
var existing = this.GetByItemId(entity.ItemId);
var price = existing.Price; // NullReferenceException coming your way
Il motivo si tende a non farlo ultima opzione, è che il NullReferenceException default è luce dettaglio ed appena afferma
riferimento non impostato a un'istanza di un oggetto.
Quale, a dire il vero, potrebbe benissimo essere il messaggio di errore più inutile in C#.
Dal tuo codice, 'IndexOutOfRangeException' non sembra adattarsi: mi aspetto un'eccezione di questo tipo quando accedo a una struttura indicizzabile (array, elenco) con indice intero e l'indice utilizzato non è compreso nell'intervallo. il tuo 'GetItemById (int itemID)' sembra utilizzare un id di qualcosa per una ricerca, non un numero intero come indice –
è il 'esistente' null o è il valore'existing.Price' null, cose abbastanza diverse che sarebbero. I tuoi esempi indicano comunque entrambi i modi. –
Se mancano dettagli nell'eccezione di riferimento null, forse si vorrà ereditarlo e creare la propria eccezione con le proprietà necessarie? O qualsiasi altra vecchia eccezione personalizzata con qualche descrizione informativa, è probabilmente quello che farei ... – Culme