我有以下代碼,試圖捕獲空引用。然後它會拋出一個異常,並帶有更明確的消息屬性中指定的錯誤原因。IndexNotFoundException與NullReferenceException
什麼樣的例外應該它扔?一個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;
or a NullReferenceException
?
var existing = this.GetByItemId(entity.ItemId);
if (existing == null)
{
throw new NullReferenceException("The specified item does not exist.");
}
var price = existing.Price;
或者,我們應該讓這個異常順其自然嗎?
var existing = this.GetByItemId(entity.ItemId);
var price = existing.Price; // NullReferenceException coming your way
我們往往不這樣做最後的選擇的原因是,默認的NullReferenceException是在細節上的光,只是指出
對象引用不設置到對象的實例。
說實話,這可能是C#中最無用的錯誤信息。
在您的代碼中,IndexOutOfRangeException似乎不適合:在使用整數索引訪問可索引結構(數組,列表)時,我期待這樣的異常,並且使用的索引超出範圍。 你的'GetItemById(int itemID)'似乎使用了一個查找的東西的id,而不是一個整數,因爲索引 –
是'存在的'null或是'existing.Price' null,它們會完全不同。然而,你的例子表明了這兩種方式。 –
如果缺少空引用異常中的細節,也許您會想要繼承它並使用您需要的屬性創建自己的異常?或者只是任何舊的自定義異常與一些豐富的描述,這可能是我會做... – Culme