NullReferenceException

NullReferenceException

我有以下代码 try catch 空引用。然后它会抛出一个异常,并为 message 属性中指定的错误提供更明确的原因。

应该抛出哪种异常?一个 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;

还是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# 中最无用的错误消息。

最佳答案

我会为此使用自定义异常(例如 ItemNotFoundException )。
NullReferenceException内或框架中某处的其他内容可能会抛出IndexOutOfRangeExceptionthis.GetByItemId()

如果项目没有出现在集合中(例如添加它),调用者可能希望执行后续操作。
使用您自己的异常允许调用者专门对异常进行 catch 并做出相应的 react 。

关于c# - IndexNotFoundException 与 NullReferenceException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33520690/

10-11 14:38